定义静态类字段时,多个已定义符号的链接器错误

时间:2017-03-25 20:33:16

标签: c++ static linker-errors lnk2005

我有一个类,我在其中定义了一个静态整数,希望能跟踪该类的多少个对象被实例化。

class mob {

public:

mob::mob();
mob::mob(std::string, std::string, int, int, int, int, int);
//some other stuff

private:
//some other stuff
static int mob_count;

};
int mob::mob_count = 0; 

然后我定义了以下构造函数:

    mob::mob(string name, string wName, int lowR, int highR, int health, int defense, int reward)
{
    nName = name;
    nWeapon.wName = wName;
    nWeapon.wRange.Rlow = lowR;
    nWeapon.wRange.RHigh = highR;
    nHealth = health;
    nArmor = defense;
    xpReward = reward;
    ++mob_count;
}

那我错过了什么?我想我正在做我教科书告诉我的所有事情。

I get this when compiling

我希望有人可以指出我的错误,非常感谢你。

编辑:@ linuxuser27帮助我解决了我的问题,所以基本上我只是移动了

 int mob::mob_count = 0; 

从类定义到类实现,如下所示:

mob.h:

class mob {

public:

mob::mob();
mob::mob(std::string, std::string, int, int, int, int, int);
//some other stuff

private:
//some other stuff
static int mob_count;

};

mob.cpp

int mob::mob_count = 0; 

构造函数保持不变。

1 个答案:

答案 0 :(得分:0)

我假设您在头文件(例如mob.hpp)中声明了您的类,然后将头文件包含在多个编译单元(即cpp文件)中。基本上这个:

的main.cpp

#include "mob.hpp" ...

mob.cpp

#include "mob.hpp" ...

从标头文件中删除int mob::mob_count = 0;并将其放入mob.cpp