“多重定义”错误。我究竟做错了啥?
Posted
技术标签:
【中文标题】“多重定义”错误。我究竟做错了啥?【英文标题】:"Multiple Definition Of" Error. What am I doing wrong?“多重定义”错误。我究竟做错了什么? 【发布时间】:2011-08-24 05:20:28 【问题描述】:我有以下课程:
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()
显然我的编译器不喜欢这样。产生的错误是“Character::char_count 的多重定义”,但我没有看到多重定义。
???
【问题讨论】:
发布更长版本的错误消息。 实际代码中真的缺少包含保护#ifdef
/#define
吗?
【参考方案1】:
该静态字段的初始化
int * Character::char_count = 0;
应该在 .cpp 文件中。否则会发生以下情况:一旦有多个 .cpp 文件包含 .h 文件,您就有了静态字段的两个定义,这会导致稍后出现链接错误。包含防护在这里没有帮助 - 它们只能防止多次包含到同一个 .cpp 文件中,而不是不同的 .cpp 文件中。
【讨论】:
hmm.. 我试过了,但仍然没有产生多少。我有同样的错误。还有其他想法吗? @Holland:你是否从 .h 文件中删除了初始化程序? 是的,我有。还是什么都没有:/ 应该只在.cpp
文件中。
确定你真的重新编译了所有文件?如果它只在一个.cpp
之内,它应该可以工作以上是关于“多重定义”错误。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 JS 在我的页面上运行重定向。我究竟做错了啥? [复制]
Python 3 list(dictionary.keys()) 引发错误。我究竟做错了啥?
我的自定义 mobilenet 训练模型未显示任何结果。我究竟做错了啥?