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的情况下,当我试图设置"触发器t"时,我得到错误"触发器":未声明的标识符。我该怎么做才能从ProgramWndProc引用触发器对象?
谢谢!
根据要求,这里有一份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 inturn包含trigger.h。因此,在编译globals.h时,编译器没有看到class trigger。
理想情况下,代码中不应该有任何循环依赖项。触发器.h中的任何一个都将取决于globals.h,或者相反,而不是两者都依赖。
要编译它,可以创建global.cpp并将函数定义放入其中。请注意,这不会破坏循环依赖关系。
您尝试将类型为Trigger的void*分配给t。
由于触发器的ctor接受无效*try:
for (int i = 0; i < Gamma_Globals::gvTriggers.size(); i++)
{
Trigger t( Gamma_Globals::gvTriggers[i] );
}
相关文章:
- 引用对象成员函数的成员函数
- 从 Base 引用对象调用派生类的成员
- 转换引用对象的边界框?
- 现代编译器会优化只引用对象子集的局部变量吗
- l值引用对象上的Constexpr成员函数:Clang和gcc不同意
- 将 const 类型引用对象注册为类成员对象C++
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- 无法用2D矢量成员引用对象
- 在由引用对象传递中访问由引用对象传递的变量
- 如何使用QString引用对象名称
- 使用自动迭代器引用对象
- C++ 在另一个对象中引用对象的当前状态
- 使用共享对象和引用对象进行引用计数
- 未显式引用对象的全局对象构造函数在最终二进制文件 - LD 中被丢弃
- 引用对象的动态类型何时可以更改
- 引用对象内部的指针
- C++从全局静态函数中引用对象
- C++如何仅在没有其他人直接或间接引用对象指针时删除该指针
- 如何使用C++引用对象
- 为什么引用对象仅保存特定类型的引用