我有这段代码
文件:Gnome.cpp
#include "Living.h"
class Gnome : public Living {
public:
Gnome();
void drawObjects();
};
Gnome::Gnome()
{
// **** The line below is where the error occurs ****
spriteImg = new Sprite("graphics/gnome.bmp");
loaded = true;
}
档案:Living.h
#include <iostream>
#include "Sprite.h"
using namespace std;
class Sprite;
class Living {
protected:
int x,y;
static Sprite *spriteImg; //= NULL;
bool loaded;
void reset();
public:
Living();
~Living();
int getX();
void setX(int _x);
int getY();
void setY(int _y);
void virtual drawObjects() =0;
};
但是当我尝试构建它时,链接器会显示以下错误:
对Living :: spriteImg的未定义引用
我不知道如何解决这个问题 - 问题是什么?
答案 0 :(得分:6)
您声明了spriteImg,但从未定义过它。在living.cpp中,尝试添加以下内容:
Sprite* Living::spriteImg = NULL;
由于您声明了它,编译器允许您引用它,并期望链接器将解析引用。由于永远不会有定义,链接器不能这样做,它会抱怨。
编辑:如果您想了解更多有关此处发生的事情,请参阅“编译单元”,“编译”,“链接”和“C ++中的静态类变量”等主题。 “