Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;“的多重定义;错误。我做错了什么?_C++_Multiple Definition Error - Fatal编程技术网

C++ &引用;“的多重定义;错误。我做错了什么?

C++ &引用;“的多重定义;错误。我做错了什么?,c++,multiple-definition-error,C++,Multiple Definition Error,我有以下课程: class Character { public: Character(); Character(std::string char_name, Race char_race, Gender char_gender); ~Character(); int get_id() { return this->char_id; } std::string get_name() { return this->name; } Rac

我有以下课程:

class Character
{
public:
    Character();
    Character(std::string char_name, Race char_race, Gender char_gender);
    ~Character();

    int get_id() { return this->char_id; }
    std::string get_name() { return this->name; }
    Race get_race() { return this->race; }
    Gender get_gender() { return this->gender; }

private:
    int char_id;
    static int * char_count;
    std::string name;
    Race race;
    Gender gender;
};
int * Character::char_count = 0;
#endif // CHARACTER_H
注意静态字段,它在类之外初始化

以下是实现:

Character::Character()
{
    this->char_id = *char_count;
    char_count++;
}

Character::Character(std::string char_name, Race char_race, Gender char_gender)
{
    this->char_id = *char_count;
    char_count++;
    this->name = char_name;
    this->race = char_race;
    this->gender = char_gender;
}

Character::~Character()
{

}
显然我的编译器不喜欢这个。产生的错误是“字符的多重定义::字符计数”,但我看不到多重定义


??该静态字段的初始化

int * Character::char_count = 0;

应位于.cpp文件中。否则会发生以下情况:一旦有多个.cpp文件包含了.h文件,您就得到了静态字段的两个定义,这将在以后导致链接错误。include防护在这里没有帮助-它们只防止多个包含到同一个.cpp文件中,而不是不同的.cpp文件中。

hmm。。我试过了,但还是没什么效果。我也有同样的错误。还有其他想法吗?@Holland:你从.h文件中删除了初始值设定项吗?是的,我有。仍然没有:/应该只在
.cpp
文件中。是否确实重新编译了所有文件?如果仅在一个
.cpp
内,则应发布更长版本的错误消息。实际代码中是否确实缺少include guard
\ifdef
/
\define