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 文件中。
如何解决这个问题?
刚收到以下错误:
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 文件中。