如何解决这个问题?
只是出现以下错误:
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
似乎问题不在头文件中。
编辑:标题文件如下所示:
#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
答案 0 :(得分:2)
您已在头文件" Game.h"中实例化了Game
个实例,并且由于这个实例包含在多个文件中,因此最终会有game
个多个实例链接时间。变化:
class Game
{
public:
...
}game;
为:
class Game
{
public:
...
};
extern Game game;
然后添加:
Game game;
在一个的.cpp文件中。
答案 1 :(得分:0)
在你的头文件(Write.cpp和GameBoard.cpp中包含的头文件)中,你可能会有一个实例而不是一个声明。
常见案例/陷阱:
extern
void foo(Bar& b) {}
代替void foo(Bar& b);
没有更多细节,很难帮助......
查找定义addnewtile
函数的位置,例如......
修改的
了解更多详情
class Game
{
(zip)
}game;
这是在每次包含头文件时声明类游戏并创建游戏对象。
使用
class Game
{
(zip)
};
在头文件中和cpp中的Game game;
或使用单例模式/静态实例。