g ++ erwartete unqualifizierte ID vor '(' Token

8

Ich erhalte diesen Fehler, wenn ich stl_vector.h verwende. Ich bin auf Linux mit g ++ zu kompilieren.

%Vor%
  

usr / include / c ++ / 4.5 / bits / stl_vector.h: 1143: 40: Fehler: erwartete unqualifizierte ID vor ‘(’ token

Ich bin nicht sicher, warum ich diesen Fehler bekomme, ich habe viel gesucht und einige "ähnliche" Probleme gefunden, aber ich kann meine nicht lösen.

EDIT: also hier ist das Fehlerprotokoll:

%Vor%

Sie können im vorherigen Fehlerprotokoll sehen, dass "vector" wie folgt vom Header "caction.h" aufgerufen wird:

%Vor%

Dann ruft Vector bit / stl_vector.h wie folgt auf:

%Vor%

nur die letzten 2 Header aus Vektor (stl_vector und stl_bvector) geben mir den exakt gleichen Fehler, der Rest ist in Ordnung. Irgendwelche Ideen?

Vielen Dank im Voraus für Ihre Hilfe.

    
user977480 03.10.2011, 22:02
quelle

3 Antworten

9

Dies kann daran liegen, dass der Präprozessor Ihren Code beschädigt hat, wahrscheinlich weil Sie das Makro max definiert haben. Dies kann mit der C-Bibliothek passieren, weil der C-Standard im Allgemeinen C-Standardbibliotheksfunktionen als Makros zulässt (obwohl ich nur ein solches Missgeschick auf MSVC gesehen habe).

Um zu überprüfen, können Sie

  • Vorverarbeitung der Quelle mit gcc -E und Suche der Ausgabe nach dem entsprechenden Code. Überprüfen Sie, ob es unbeschädigt ist.
  • Fügen Sie eine #undef max -Zeile vor #include <vector> hinzu und sehen Sie, ob es hilft.
jpalecek 04.10.2011 21:49
quelle
2

user977480, vorausgesetzt, Sie haben gesagt "Ich erhalte diesen Fehler bei der Verwendung von stl_vector.h", nehme ich an, dass Ihr Code etwas wie #include <bits/stl_vector.h> oder #include <c++/4.5/bits/stl_vector.h> verwendet.

Diese #include -Anweisung ist die Ursache Ihres Problems. Sie müssen stattdessen #include <vector> verwenden. stl_vector.h ist ein Implementierungsdetail und es funktioniert nicht von selbst. Die Header-Datei " vector " enthält "bits / stl_vector.h", nachdem sie einige andere Implementierungsdetaildateien enthalten hat, einschließlich derjenigen, die std::max definiert.

    
David Hammen 03.10.2011 23:17
quelle
1

Verwenden Sie keine Identifikatoren, die entweder mit einem doppelten Unterstrich oder einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sofern sie nicht von der Implementierung bereitgestellt werden.

Der Compiler und / oder die Standardbibliothek dürfen __N , __s , __len usw. beliebig verwenden.

Es ist nicht offensichtlich, dass das Ihr Problem ist, aber sehen Sie, was passiert, wenn Sie alle diese Identifikatoren ändern.

BEARBEITEN : Ich habe mich geirrt, der von Ihnen gepostete Code ist Teil der Implementierung, daher ist die Verwendung von reservierten Bezeichnern vollkommen angemessen.

/usr/include/c++/4.5/bits/stl_vector.h auf meinem System enthält den gleichen Code. Höchstwahrscheinlich verursacht etwas in Ihrem eigenen Code den Fehler. Zum Beispiel, wenn ich

mache %Vor%

Ich bekomme 156 Fehler. Der richtige Weg ist

%Vor%

Aber wenn Sie #define bestimmte Makros vor dem #include <vector> haben, könnte dies das Problem verursachen, das Sie sehen.

Zeigen Sie uns Ihren Code, vorzugsweise bis zur kleinsten Quelldatei, die den Fehler aufweist.

    
Keith Thompson 03.10.2011 22:50
quelle

Tags und Links