问题描述
我有此代码
文件: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;
};
但是当我尝试构建它时,链接器显示此错误:
But when I try to build it, the linker shows this error:
我不知道该如何解决-有什么问题?
I have no idea how to fix this -- what's the problem?
推荐答案
您声明了spriteImg,但从未对其进行定义.在living.cpp中,尝试添加以下内容:
You declared spriteImg, but never defined it. In living.cpp, try adding the following:
Sprite* Living::spriteImg = NULL;
自声明以来,编译器允许您对其进行引用,并期望链接程序将解析该引用.由于永远都没有定义,因此链接器无法这样做,并且会抱怨.
Since you declared it, the compiler allows you to reference it, and expects that the linker will resolve the reference. Since there is never a definition, the linker can't do so, and it complains.
编辑:如果您想了解更多有关此处发生的情况的信息,请研究诸如C ++中的编译单元",编译",链接"和静态类变量"之类的主题."
if you would like to learn more about what's going on here, research topics such as "compilation units," "compiling," "linking," and "static class variables in C++."
这篇关于为什么我会收到“未定义的参考"?静态成员变量的链接错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!