2012-04-12 7 views
-1

Der vollständige Fehler istMSVC Fehler C2371 „Neudefinition, verschiedene Grundtypen“, es sei denn ich sehe nicht, wo ich etwas neu zu definieren bin

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, Linie 130: Moves(*Pos); (Wenn ich weglassen diese Zeile kompiliert der Code ohne Fehler)
  • search.cpp, Linie 100:. Position *Pos = Mov.ChildPosition;

der Moves Konstruktor wird erklärt: Moves(Position &Pos);

Mov ist ein Funktionsargument: void searchMove(Move &Mov)

Warum MSVC sagen, ich bin Pos neu zu definieren?

Update 1: Wie gewünscht:

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

Position Objekte zu den Konstrukteuren von Move und Moves Gegenstände übergeben werden, die jeweils in ChildPosition und ParentPosition gespeichert.

Update 2: Ich ersetzt Linie 130 mit David Normans Vorschlag unten, und jetzt erhalte ich fünf "LNK2001: ungelöst externes Symbol" Fehler. Das ist seltsam, weil sie sich alle auf Variablen beziehen, die unter Verwendung von extern in meiner search.h-Datei deklariert sind.

Update 3: Ich ersetzte extern durch static und alles jetzt kompiliert. Ich verstehe nicht, warum ich die Fehler bekam, die ich war. Kann mir das jemand erklären?

+1

Könnten Sie schreiben mehr Code? Es ist schwer zu bestimmen, was das Problem von diesem Code ist? Es kann mehr sein als das, was Sie gepostet haben. – josephthomas

+0

Kein Problem, aber welchen Code soll ich posten? –

+1

Orte, an denen Sie 'Pos' deklarieren. –

Antwort

1

Wenn Ihre Absicht ist ein Moves Objekt auf der Leitung 130 zu erstellen, dann versuchen Sie ihm einen Namen geben:

Moves dummyMoves(*Pos); 

Andernfalls werden Sie wahrscheinlich eine Variable mit dem Namen Pos vom Typ Moves erklärt *

+0

Die 'Moves'-Klasse generiert eine Liste von' Move'-Objekten in ihrem Konstruktor. Es wird für keinen anderen Zweck verwendet, daher habe ich keinen Grund gesehen, Instanzen Namen zu geben. –

+0

"Andernfalls deklarieren Sie wahrscheinlich eine Variable namens Pos des Typs Moves *" Was führt Sie zu dieser Schlussfolgerung? –

+0

Ich habe die Zeile 130 durch Ihren Vorschlag ersetzt und erhalte jetzt eine ganze Reihe von "LNK2001: ungelöstes externes Symbol" -Fehler. Das bringt mich der Lösung näher. Vielen Dank. –

Verwandte Themen