ld:在标头中定义全局变量时,体系结构x86_64的符号重复

use*_*914 0 c++ macos symbols x86-64 duplicates

如何解决这个问题呢?

刚得到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

看来问题不在头文件中。

编辑:头文件看起来像这样:

#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
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 5

您已Game在头文件“ Game.h”中实例化了一个实例,并且由于该实例已包含在多个文件中,因此game在链接时最终会有多个实例。更改:

class Game
{
  public:

  ...

}game;
Run Code Online (Sandbox Code Playgroud)

至:

class Game
{
  public:

  ...

};

extern Game game;
Run Code Online (Sandbox Code Playgroud)

然后添加:

Game game;
Run Code Online (Sandbox Code Playgroud)

一个你的.cpp文件。