Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++;对'的多重定义';首先在这里定义_C++ - Fatal编程技术网

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.cpp
  • #包括“Player.hpp”
    命名空间播放器
    {
    const char*name=“Jason”;
    }
    
  • Card.cpp
  • #包括“Player.hpp”
    命名空间播放器
    {
    const char*name=“Jason”;
    }
    
  • Player.hpp
  • 名称空间播放器
    {
    外部常量字符*名称;
    }
    
    程序中每个唯一的完全限定符号最多只能有一个定义。您收到的链接器错误正在发生,因为您在
    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文件中定义它。