C++ MSVC错误C2371“;重新定义;不同的基本类型;,除了我没有';我看不出我在哪里';我在重新定义一切

C++ MSVC错误C2371“;重新定义;不同的基本类型;,除了我没有';我看不出我在哪里';我在重新定义一切,c++,visual-c++,types,C++,Visual C++,Types,完全错误是 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行:移动(*Pos)(如果省略这一行,代码编译时不会出错。) search.cpp,第100行:Position*Pos=Mov.ChildPo

完全错误是

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行:
    移动(*Pos)(如果省略这一行,代码编译时不会出错。)
  • search.cpp,第100行:
    Position*Pos=Mov.ChildPosition
Moves
构造函数被声明为:
Moves(Position&Pos)

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

为什么微软说我在重新定义Pos

根据要求更新1:

  • main.cpp,第32行:
    位置位置(TESTF、TESTW、TESTB)
  • main.cpp,第36行:
    searchRoot(位置5)
  • moves.cpp,第467行:
    Position*NextPosition=新位置(ParentPosition->flags^0x8000,白色,黑色,他们的,我们的)
  • moves.cpp,第474行:
    Move*Mov=新移动(*下一个位置,工件,正方形1,正方形2,捕捉)
  • search.cpp,第26行:
    void searchRoot(位置和位置,U8深度)
  • search.cpp,第32行:
    移动Mov(Pos)
Position
对象被传递给
Move
Moves
对象的构造函数,分别存储在
ChildPosition
ParentPosition

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


更新3:我将
extern
替换为
static
,现在一切都可以编译了。我不明白为什么我会犯这样的错误。有人能给我解释一下吗?

如果您打算在第130行创建一个移动对象,请尝试给它命名:

Moves dummyMoves(*Pos);

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

您能发布更多代码吗?很难确定这段代码的问题是什么?这个问题可能比你发布的内容更重要。这不是问题,但我应该发布什么代码?声明
Pos
的地方。在某个地方定义了
Moves
宏…?放下水晶球并关闭问题。
Moves
类在其构造函数中生成
Move
对象的列表。它没有用于任何其他目的,因此我不认为有理由给实例命名。“否则,您可能正在声明一个名为Pos的Moves*类型变量”是什么导致您得出这个结论的?我用您的建议替换了第130行,现在收到一组全新的“LNK2001:未解决的外部符号”错误。这让我更接近解决方案。谢谢。@Svad:这是因为在变量声明中忽略了额外的括号和空格。不移动*位置看起来更像变量声明?唯一的区别是括号。