1

一段时间以来,我一直在努力寻找解决方案。我想从具有静态指针的类继承,但我得到错误 LNK2001: unresolved external symbol "protected: static class cGame * cEvent::mGame" (?mGame@cEvent@@1PAVcGame@@A)

最理想的是,我只需初始化我的类 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
4

3 回答 3

5

您需要在类定义static成员:

##include "game.h"

//do this .cpp file

cGame* cEvent::mGame = nullptr;

//or initialize it as : cGame* cEvent::mGame = create object!

请注意,类中的静态成员只是声明,而不是定义

于 2013-01-05T21:59:58.733 回答
1

您只mGame在头文件中声明:

static cGame* mGame;

这告诉编译器mGame存在及其类型是什么,但实际上并没有为mGame存在创造空间。为此,您需要在 cpp 文件中定义它:

cGame* cEvent::mGame = [some intial value];

现在链接器有了一个位置mGame,任何引用它的人都可以指向该位置。链接器无法对标头执行此操作,因为多个文件可能包含标头。我们只想要一个位置mGame,所以它需要放在一个 cpp 文件中。

于 2013-01-05T22:04:12.160 回答
0

您必须mGame.cpp文件中定义:

cGame* cEvent::mGame = ...;

(酌情替换...。)

于 2013-01-05T22:00:42.947 回答