指向类链接器错误的静态指针

时间:2013-01-05 21:58:56

标签: c++ static linker-errors

我一直在试图寻找一个解决方案。我想继承一个带有静态指针的类,但我是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

3 个答案:

答案 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 = ...;

(根据需要更换...。)