我一直在试图寻找一个解决方案。我想继承一个带有静态指针的类,但我是geterror LNK2001:未解析的外部符号“protected:static class cGame * cEvent :: mGame”(?mGame @ cEvent @@ 1PAVcGame @@ A)
Optimaly我只会初始化我的类cEvent一次,然后不要在继承的类中传递指针。
#ifndef EVENT_H
#define EVENT_H
#include "game.h"
class cEvent
{
protected:
static cGame* mGame;
public:
cEvent(){;}
virtual void doEvent(){;}
};
class cEventExitButton: public cEvent
{
private:
public:
cEventExitButton(cGame *g){mGame = g;}
void doEvent(){mGame->getWindow()->close();}
};
#endif
答案 0 :(得分:5)
您需要定义 {/ 1}}成员在之外该类:
static
请注意,类中的 static 成员只是声明,而不是 definition 。
答案 1 :(得分:1)
您只在头文件中声明了mGame
:
static cGame* mGame;
这告诉编译器mGame
存在及其类型是什么,但实际上并没有为mGame
创建空间。为此,您需要在cpp文件中定义它:
cGame* cEvent::mGame = [some intial value];
现在,链接器的位置为mGame
,任何引用它的人都可以指向该位置。链接器无法对标头执行此操作,因为多个文件可能包含标头。我们只需要mGame
的单个位置,因此需要进入cpp文件。
答案 2 :(得分:0)
您必须在mGame
文件中定义.cpp
:
cGame* cEvent::mGame = ...;
(根据需要更换...
。)