2012-04-12 106 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

相關問題