ld:在 header 中定义全局变量时架构 x86_64 的重复符号

ld: duplicate symbols for architecture x86_64 when defining a global var in a header

如何解决这个问题?

刚收到以下错误:

g++ 输出:

duplicate symbol _game in:
    /var/folders/w6/yqp0s0t92hl5g842hg8tztfr0000gn/T/main-62666f.o
    /var/folders/w6/yqp0s0t92hl5g842hg8tztfr0000gn/T/Game-a5a31d.o
duplicate symbol _game in:
    /var/folders/w6/yqp0s0t92hl5g842hg8tztfr0000gn/T/main-62666f.o
    /var/folders/w6/yqp0s0t92hl5g842hg8tztfr0000gn/T/Write-83f8ee.o

问题似乎不在 header 个文件中。

编辑:Header 个文件如下所示:

#ifndef GAME_H
#define GAME_H
#include "Color.h"
#include "Tile.h"

class Game
{
  public:

    Game();
    ~Game();
    Color getActivePlayer();
    void setStarttile(Tile Firststarttile);
    Color togglePlayer();
    void setRunning(bool run);
    char newActiveplayer;
    void run();
    void runsecondmethod();

  private:
    Game(const Game &);
    Color Activeplayer;
    Tile *Starttile;
    bool Running;
}game;

#endif

在您的头文件(Write.cpp 和 GameBoard.cpp 中包含的那个)中,您可能有一个实例化而不是声明。

普通 cases/pitfalls :

  • 全局变量前缺少 extern
  • 具有函数实现(即具有 void foo(Bar& b) {} 而不是 void foo(Bar& b);

没有更多的细节,很难帮助...

查找 addnewtile 函数定义的地方,例如...

编辑

更多详情

class Game
{
   (zip)
}game;

这是在每次包含头文件时声明 class 游戏并创建一个游戏对象。

使用

class Game
{
   (zip)
};

在头文件中,Game game;在cpp

或者使用单例模式/静态实例。

您在头文件 "Game.h" 中实例化了一个 Game 实例,并且由于它被包含在多个文件中,您最终在 [=26] 处得到了 game 的多个实例=] 时间。变化:

class Game
{
  public:

  ...

}game;

至:

class Game
{
  public:

  ...

};

extern Game game;

然后添加:

Game game;

在您的 一个 .cpp 文件中。