繁体   English   中英

C ++从全局静态函数引用对象

[英]C++ Referencing an Object from a global static function

我有一个全局声明的静态函数,需要引用一个对象,但是当我这样做时,出现“未声明的标识符”错误。

这是我的代码示例

#pragma once

#include "stdafx.h"
#include <vector>
#include "Trigger.h"

using namespace std;

namespace Gamma_Globals
{
    static vector<void*> gvTriggers;
}

static LPARAM CALLBACK ProgramWndProc(HWND, UINT, WPARAM, LPARAM);

static LPARAM CALLBACK ProgramWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_KEYUP:
        {
            for (int i = 0; i < Gamma_Globals::gvTriggers.size(); i++)
            {
                Trigger t = Gamma_Globals::gvTriggers[i];
            }
        }
    default: return DefWindowProc(hWnd, uMsg, wParam, lParam); break;
    }

    return 0;
}

问题出在WM_KEYUP情况下,当我尝试设置“ Trigger t”时,出现错误“'Trigger':未声明的标识符”。 我该怎么做才能从ProgramWndProc引用Trigger对象?

谢谢!


根据要求,这是Trigger.h的副本

#pragma once

#include "Noun.h"
#include "TermFactory.h"
#include "Globals.h"

using namespace std;

class Trigger
{
public:
    enum   TRIGGER_TYPE {NONE, ONKEYPRESS, ONMOUSEPRESS};

    Trigger(void*);
    Trigger(LPTSTR trigger, LPTSTR action, Gamma_Globals::TRIGGER_TIME);
    ~Trigger(void);

    VOID Perform();

    TRIGGER_TYPE GetType();

private:
    LPTSTR        lpCondition;
    LPTSTR        lpAction;
    Gamma_Globals::TRIGGER_TIME triggerTime;
    vector<Noun*> vNouns;
    TRIGGER_TYPE  triggerType;

    VOID LoadAction(LPTSTR Action);
    HRESULT LoadCondition(LPTSTR Condition);
};

您的trigger.h包括globals.h。 globals.h反过来包含trigger.h。 因此,在编译globals.h时,编译器没有看到Class Trigger。

理想情况下,代码中不应存在任何循环依赖性。 trigger.h要么取决于globals.h,要么相反。

要进行编译,可以创建global.cpp并将函数定义放在其中。 注意,这不会破坏循环依赖性。

您尝试将void *分配给类型为Trigger的t。

由于Trigger的ctor接受void *,请尝试:

for (int i = 0; i < Gamma_Globals::gvTriggers.size(); i++)
{
    Trigger t( Gamma_Globals::gvTriggers[i] );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM