'已经在.obj中定义'错误,Visual Studio C ++?

时间:2012-04-23 20:15:42

标签: c++ visual-studio-2010

1>knightTour_Main.obj : error LNK2005: "int p" (?p@@3HA) already defined in Definitions.obj
1>knightTour_Main.obj : error LNK2005: "int q" (?q@@3HA) already defined in Definitions.obj

错误^

这是我在头文件中定义它的代码:

#include<iostream>
using namespace std;
int p,q;

int f( int,  int,const int [][8],const int [][8], int [],int []);

我试过

extern int p,q;

但是在那之后我得到了这个错误

1>knightTour_Main.obj : error LNK2001: unresolved external symbol "int p" (?p@@3HA)
1>knightTour_Main.obj : error LNK2001: unresolved external symbol "int q" (?q@@3HA)

你还推荐别的吗?谢谢。

1 个答案:

答案 0 :(得分:1)

int p,q;替换extern int p,q;是正确的,但您还需要在一个.cpp文件中包含int p,q;

如果标题中有定义(int p,q;),那么您将获得为包含该标题的每个文件分配的pq的副本,并且它们冲突(“已定义”错误)。如果您使用声明(extern int p,q;)替换它,则不会在任何地方分配pq