gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:00:42 25 4
gpt4 key购买 nike

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

这是我的代码示例

#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 并将函数定义放在那里。请注意,这不会破坏循环依赖。

关于C++ 从全局静态函数引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com