C++ LNK 2005 错误“已在 .obj 中定义
C++ LNK 2005 Error "already defined in .obj
尽管据我所知,我使用正确的头文件和 cpp 文件格式创建了游戏 class,但我还是收到了这个 LNK 2005 错误。
在谷歌搜索了一段时间后,这个问题似乎是这个错误的主要原因,谁能看出我搞砸了什么?
我的game.h文件如下:
#pragma once
class Game
{
public:
//Variables
char grid[9][8] = { { '#','#','#','#','#','#','#','#' },
{ '#','G',' ','D','#',' ',' ','#' } ,
{ '#',' ',' ',' ','#',' ',' ','#' } ,
{ '#','#','#',' ','#',' ','D','#' } ,
{ '#',' ',' ',' ','#',' ',' ','#' } ,
{ '#',' ','#','#','#','#',' ','#' } ,
{ '#',' ',' ',' ',' ',' ',' ','#' } ,
{ '#','#','P','#','#','#','#','#' } ,
{ '#','#','#','#','#','#','#','#' } };
int width, height;
int pX;
int pY;
char direction;
bool west;
bool north;
bool south;
bool east;
int quit;
Game();
};
我的 game.cpp 文件是:
#include "stdafx.h"
#include <String>
#include <iostream>
#include "Game.h"
using namespace std;
//constructoer
Game::Game()
{
width = 8, height = 8;
pX = 2;
pY = 7;
west = false;
north = true;
south = false;
east = false;
quit = 0;
}
我的 main 目前只是在创建对象的实例
主要内容:
#include "stdafx.h"
#include <String>
#include <iostream>
#include "Game.cpp"
#include "Game.h"
using namespace std;
int main()
{
Game g;
return 0;
}
当包含 game.cpp
时,您实际上实现了构造函数 Game::Game()
两次,即一次在 game.cpp
(这是一个单独的翻译单元)中,一次在 main.cpp
(其中包含构造函数实现代码)。
因此,您会收到链接器错误,而不是编译器错误。
要解决此问题,请删除 #include "game.cpp"
。
尽管据我所知,我使用正确的头文件和 cpp 文件格式创建了游戏 class,但我还是收到了这个 LNK 2005 错误。
在谷歌搜索了一段时间后,这个问题似乎是这个错误的主要原因,谁能看出我搞砸了什么?
我的game.h文件如下:
#pragma once
class Game
{
public:
//Variables
char grid[9][8] = { { '#','#','#','#','#','#','#','#' },
{ '#','G',' ','D','#',' ',' ','#' } ,
{ '#',' ',' ',' ','#',' ',' ','#' } ,
{ '#','#','#',' ','#',' ','D','#' } ,
{ '#',' ',' ',' ','#',' ',' ','#' } ,
{ '#',' ','#','#','#','#',' ','#' } ,
{ '#',' ',' ',' ',' ',' ',' ','#' } ,
{ '#','#','P','#','#','#','#','#' } ,
{ '#','#','#','#','#','#','#','#' } };
int width, height;
int pX;
int pY;
char direction;
bool west;
bool north;
bool south;
bool east;
int quit;
Game();
};
我的 game.cpp 文件是:
#include "stdafx.h"
#include <String>
#include <iostream>
#include "Game.h"
using namespace std;
//constructoer
Game::Game()
{
width = 8, height = 8;
pX = 2;
pY = 7;
west = false;
north = true;
south = false;
east = false;
quit = 0;
}
我的 main 目前只是在创建对象的实例
主要内容:
#include "stdafx.h"
#include <String>
#include <iostream>
#include "Game.cpp"
#include "Game.h"
using namespace std;
int main()
{
Game g;
return 0;
}
当包含 game.cpp
时,您实际上实现了构造函数 Game::Game()
两次,即一次在 game.cpp
(这是一个单独的翻译单元)中,一次在 main.cpp
(其中包含构造函数实现代码)。
因此,您会收到链接器错误,而不是编译器错误。
要解决此问题,请删除 #include "game.cpp"
。