[英]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.