-1

完整的错误是

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);
  • move.cpp,第 467 行:Position *NextPosition = new Position(ParentPosition->flags^0x8000, white, black, theirs, ours);
  • move.cpp,第 474 行:Move *Mov = new Move(*NextPosition, piece, square1, square2, capture);
  • search.cpp,第 26 行:void searchRoot(Position &Pos, U8 depth)
  • search.cpp,第 32 行:Moves Mov(Pos);

Position对象被传递给MoveMoves对象的构造函数,分别存储在ChildPositionParentPosition中。

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

更新 3:我替换externstatic,现在一切都编译了。我不明白为什么我会遇到错误。谁能给我解释一下?

4

1 回答 1

1

如果您打算在第 130 行创建一个 Moves 对象,请尝试为其命名:

Moves dummyMoves(*Pos);

否则,您可能会声明一个名为 Pos 且类型为 Moves * 的变量

于 2012-04-12T02:40:28.587 回答