完整的错误是
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
对象被传递给Move
和Moves
对象的构造函数,分别存储在ChildPosition
和ParentPosition
中。
更新 2:我用下面的 David Norman 的建议替换了第 130 行,现在我收到五个“LNK2001:未解析的外部符号”错误。这很奇怪,因为它们都引用extern
在我的 search.h 文件中声明的变量。
更新 3:我替换extern
为static
,现在一切都编译了。我不明白为什么我会遇到错误。谁能给我解释一下?