MSVC错误C2371 "redefinition; different basic types",除了我没有看到我在哪里重新定义任何东西

MSVC error C2371 "redefinition; different basic types", except I don't see where I'm redefining anything

本文关键字:新定义 在哪里 任何东 定义 redefinition C2371 错误 different basic 除了我 types      更新时间:2023-10-16

完整的错误是

1>d:testsrcsearch.cpp(130): error C2371: 'Pos' : redefinition; different basic types
1>    d:testsrcsearch.cpp(100) : see declaration of 'Pos'
  • search.cpp,第 130 行:Moves(*Pos);(如果我省略这一行,代码编译时没有错误。
  • 搜索.cpp,第 100 行:Position *Pos = Mov.ChildPosition;

构造函数声明MovesMoves(Position &Pos);

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

为什么MSVC说我正在重新定义Pos

更新 1:根据要求:

  • 主.cpp,第 32 行:Position Pos(TESTF, TESTW, TESTB);
  • 主.cpp,第 36 行:searchRoot(Pos, 5);
  • 移动.cpp,第 467 行:Position *NextPosition = new Position(ParentPosition->flags^0x8000, white, black, theirs, ours);
  • 移动.cpp,第 474 行:Move *Mov = new Move(*NextPosition, piece, square1, square2, capture);
  • 搜索.cpp,第 26 行:void searchRoot(Position &Pos, U8 depth)
  • 搜索.cpp,第 32 行:Moves Mov(Pos);

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

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

更新3:我用static替换了extern,现在一切都编译了。我不明白为什么我会出现这样的错误。谁能向我解释一下?

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

Moves dummyMoves(*Pos);

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