C++ C++;对'的多重定义';首先在这里定义
我知道这个问题已经在这个网站上讨论过了,我测试了解决方案,但它不起作用,我总是犯同样的错误。请帮帮我:')C++ C++;对'的多重定义';首先在这里定义,c++,C++,我知道这个问题已经在这个网站上讨论过了,我测试了解决方案,但它不起作用,我总是犯同样的错误。请帮帮我:') Player.cpp #包括“Player.hpp” 命名空间播放器 { const char*name=“Jason”; } Card.cpp #包括“Player.hpp” 命名空间播放器 { const char*name=“Jason”; } Player.hpp 名称空间播放器 { 外部常量字符*名称; } 程序中每个唯一的完全限定符号最多只能有一个定义。您收到的链接器错误正
#包括“Player.hpp”
命名空间播放器
{
const char*name=“Jason”;
}
#包括“Player.hpp”
命名空间播放器
{
const char*name=“Jason”;
}
名称空间播放器
{
外部常量字符*名称;
}
程序中每个唯一的完全限定符号最多只能有一个定义。您收到的链接器错误正在发生,因为您在Player.cpp
和Card.cpp
中都提供了符号Player::name
的定义
您可以自由地重用变量名;但为了避免这些问题,符号必须是唯一的。对于您的特定问题,可以通过以下方法之一解决:
- 在不同的
命名空间中定义符号
例如,您可以将
更改为:Card.cpp
//符号是Card::name——它不同于Player::Card 名称空间卡{ 常量字符*名称=。。。; }//名称空间
- 将符号定义为
结构的
/
类的
静态
成员
这可能类似于://符号是Player::Card::name——这与Player::Card不同 命名空间播放器{ 结构卡{ 静态常量字符*名称=。。。; }; }
- 用内部链接标记符号
这可以使用未命名的
(C++11及以上版本)或命名空间
(较旧的C++)来完成:静态
注意:与其他方法不同,此方法不能跨不同的源文件使用。符号是“内部化的”,这意味着它对于一个编译单元(源文件)是唯一的//符号是播放器:::名称 命名空间播放器{ 名称空间{ 常量字符*名称=。。。; } //或“static const char*name=…;” }
Card.cpp
中定义名称?在两个.cpp
文件中都定义Player::name
。你是想给他们起不同的名字还是什么?你还是可以用的。这就是标题中的声明。是的,只需从Card.cpp
中删除定义并使用它。然后使用它,标题中的声明允许您使用包含在标题中的任何位置。您只需要在一个且仅在一个.cpp文件中定义它。