2012-04-12 54 views
-1

完整的错误是MSVC错误C2371“重新定义;不同的基本类型”,但我看不出我重新定义了什么

1>d:\test\src\search.cpp(130): error C2371: 'Pos' : redefinition; different basic types 
1> d:\test\src\search.cpp(100) : see declaration of 'Pos' 
  • search.cpp,行130:Moves(*Pos);(如果我省略此线,代码编译没有错误)
  • search.cpp,线100:Position *Pos = Mov.ChildPosition;

Moves构造函数被声明:Moves(Position &Pos);

Mov是一个函数参数:void searchMove(Move &Mov)

为什么MSVC说我重新定义Pos

更新1:根据要求:

  • main.cpp中,线32:Position Pos(TESTF, TESTW, TESTB);
  • main.cpp中,线36:searchRoot(Pos, 5);
  • moves.cpp,线467:Position *NextPosition = new Position(ParentPosition->flags^0x8000, white, black, theirs, ours);
  • moves.cpp,line 474:Move *Mov = new Move(*NextPosition, piece, square1, square2, capture);
  • search.cpp,line 26:void searchRoot(Position &Pos, U8 depth)
  • search.cpp 32行:Moves Mov(Pos);

Position对象传递给MoveMoves对象的构造,分别存储在ChildPositionParentPosition

更新2:我用下面的David Norman的建议替换了130行,现在我收到5个“LNK2001:无法解析的外部符号”错误。这很奇怪,因为它们都引用在我的search.h文件中使用extern声明的变量。

更新3:我用static取代了extern,现在所有东西都在编译。我不明白为什么我得到了我的错误。任何人都可以向我解释这个吗?

+1

你能发布更多的代码?这个代码很难确定问题是什么?问题可能比您发布的更多。 – josephthomas 2012-04-12 02:23:31

+0

不是问题,但我应该发布什么代码? – 2012-04-12 02:24:30

+1

你申报'Pos'的地方。 – 2012-04-12 02:25:40

回答

1

如果你的目的是要创造同样的动作上线130对象,然后尝试给它一个名字:

Moves dummyMoves(*Pos); 

否则你可能声明名为波什类动作的变量*

+0

Moves类在其构造函数中生成一个Move对象列表。它不用于任何其他目的,所以我没有看到给出实例名称的理由。 – 2012-04-12 02:49:02

+0

“否则,您可能会声明一个名为Pos的变量,类型为Moves *” 是什么使您得出这个结论? – 2012-04-12 02:59:28

+0

我用您的建议替换了第130行,现在正在接收一组全新的“LNK2001:无法解析的外部符号”错误。这让我更接近解决方案。谢谢。 – 2012-04-12 03:02:14

相关问题