为什么我得到静态成员变量的“未定义引用”链接错误?

时间:2012-01-31 03:24:07

标签: c++

我有这段代码

文件: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的未定义引用

我不知道如何解决这个问题 - 问题是什么?

1 个答案:

答案 0 :(得分:6)

您声明了spriteImg,但从未定义过它。在living.cpp中,尝试添加以下内容:

Sprite* Living::spriteImg = NULL;

由于您声明了它,编译器允许您引用它,并期望链接器将解析引用。由于永远不会有定义,链接器不能这样做,它会抱怨。

编辑:如果您想了解更多有关此处发生的事情,请参阅“编译单元”,“编译”,“链接”和“C ++中的静态类变量”等主题。 “