2010-11-11 22 views
5

Puoi spiegare cosa significa in genere l'errore del titolo?: espressione primaria prevista prima del token X

A volte capisco e alla fine riesco sempre a risolverlo per errore, ma ancora non ho idea di cosa significhi.

Ecco un esempio dal mio errore corrente:

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

error: expected primary-expression before ')' token

+0

Come su un esempio? – TonyK

+0

Si suppone che sia una dichiarazione di funzione o una chiamata di funzione? – MSalters

+0

Chiamata funzione msalters –

risposta

2

Il simbolo & viene utilizzato come operatore AND bit a bit. Cioè 0x3 & 0x5 == 0x1. In questo modulo, è un operatore infisso tra due espressioni. Da quello che ci hai detto, ora sappiamo che ss è un'espressione. Pertanto, il compilatore pensa che ss & sia l'inizio di un'espressione AND bit a bit, e si aspetta il lato destro (che chiama "espressione primaria"). Tuttavia, invece di una parte destra, il compilatore incontra uno ). Questo ovviamente non è il lato destro di un'espressione AND.

3

difficile dire senza alcun campione, ma IIRC questo avviene come conseguenza di utilizzare un simbolo indefinito (ad esempio, una funzione o un tipo senza un dichiarazione - non sono sicuro quale esattamente). Di conseguenza, il parser si confonde e non sa cosa aspettarsi più avanti nel codice.

- (credo che questo errore si verifica solo in combinazione con altri errori o si può fornire un frammento di codice che darebbe solo questo errore sul compilatore GCC??) -

edit: Nel codice che hai fornito , è solo il parser che si perde dopo aver incontrato un simbolo "&" in un posto illegale - quindi una conseguenza della sintassi non valida, non della semantica non valida.

Tali messaggi di errore criptici (o spesso peggiori) sono la conseguenza del fatto che la grammatica di C++ è indecidibile e il compilatore, vedendo un errore, non può davvero indovinare cosa doveva essere lì e quindi non può generare una descrizione più accurata .

0

Difficile da suggerire con le informazioni in OP al momento, ma lasciatemi fare un tentativo.

Supponendo che ogni altra cosa sia a posto, perché l'espressione in OP sia una chiamata di funzione, provare a cambiare il modo in cui si passa l'ultimo argomento. Se vuoi passarlo come puntatore, devi usare & prima del nome e non dopo.

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

Da documenti standard., 5.1 espressioni primarie,

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

E anche da 2,6 Gettoni,

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

Ora, credo che l'errore è abbastanza descrittivo.

Ho pe che aiuta ..

Problemi correlati