2010-11-11 22 views
5

Können Sie erklären, was der Titelfehler normalerweise bedeutet?Fehler: erwarteter primärer Ausdruck vor X-Token

Ich bekomme es manchmal und ich schaffe es immer irgendwann, es durch Zufall zu beheben, aber ich habe immer noch keine Ahnung, was es bedeutet.

Hier ist ein Beispiel aus meinem aktuellen Fehler:

Lca<RankVec, VertexVec> lca(graphList[0], dset, ss&); 

error: expected primary-expression before ')' token

+0

Wie wäre es mit einem Beispiel? – TonyK

+0

Soll das eine Funktionsdeklaration oder ein Funktionsaufruf sein? – MSalters

+0

@ MSalters Funktionsaufruf –

Antwort

2

Das & Symbol wird als bitweiser UND-Operator verwendet. I.e. 0x3 & 0x5 == 0x1. In dieser Form ist es ein Infix-Operator zwischen zwei Ausdrücken. Von dem, was Sie uns gesagt haben, wissen wir jetzt, dass ss ein Ausdruck ist. Daher denkt der Compiler ss & ist der Anfang eines bitweisen AND-Ausdrucks, und es erwartet die rechte Seite (die es als "primary-expression" bezeichnet). Statt einer rechten Seite findet der Compiler jedoch eine ). Das ist offensichtlich nicht die rechte Seite eines UND-Ausdrucks.

3

Fest ohne Probe zu sagen, aber IIRC dies geschieht als Folge ein undefiniertes Symbol (zB eine Funktion oder einen Typ ohne eine Erklärung - nicht sicher, welche genau). In der Folge wird der Parser verwirrt und weiß nicht, was er weiter im Code erwartet.

- (ich glaube, dieser Fehler tritt nur in Verbindung mit anderen Fehlern oder können Sie einen Code-Schnipsel zur Verfügung stellen, die nur diesen Fehler auf GCC Compiler geben würden?) -

edit: Im Code, den Sie zur Verfügung gestellt Es ist nur der Parser verloren gehen nach der Begegnung mit einem "&" Symbol an einem illegalen Ort - so eine Konsequenz der ungültigen Syntax, nicht ungültig Semantik. Diese kryptischen Fehlermeldungen (oder oft schlechter) sind die Folge der Tatsache, dass die C++ - Grammatik unentscheidbar ist und der Compiler, wenn er einen Fehler sieht, nicht richtig erraten kann, was da sein soll und somit keine genauere Beschreibung erzeugen kann .

0

Tough mit den Informationen in OP im Moment vorschlagen, aber lassen Sie mich es versuchen.

Angenommen, dass alles andere vorhanden ist, um den Ausdruck in OP als Funktionsaufruf zu verwenden, ändern Sie die Art, wie Sie das letzte Argument übergeben. Wenn Sie es als Zeiger übergeben möchten, müssen Sie & vor dem Namen und nicht danach verwenden.

Lca<RankVec, VertexVec> lca(graphList[0], dset, &ss); 
2

Von Standard-docs., 5.1 Primäre Ausdrücke,

Primary expressions are literals, names, and names qualified by the scope resolution operator ::.

Und auch von 2,6 Tokens,

There are five kinds of tokens: identifiers, keywords, literals,16) operators, and other separators

Nun, ich glaube, der Fehler ziemlich beschreibend ist.

Ho pe das hilft ..

Verwandte Themen