i nomi dei metodi C ++ possono essere qualificati dal nome della classe, nell'intestazione?

StackOverflow https://stackoverflow.com/questions/688802

Domanda

semplice domanda, è questo vale C ++:

class Foo
{
    void Foo::doSomething();
};

Il punto della questione:? È che l'uso ripetuto del nome della classe e il doppio del colon prima del nome valido metodo all'interno la dichiarazione della classe

sto avendo problemi di compilazione del codice che fa questo usando g ++ 4.2.3. Mi piacerebbe vedere un riferimento a qualcosa che descrive la sintassi qui, prima di scavare dentro e cambiare il codice. O il downgrade del compilatore; questo fa costruire con g ++ 3.3.6.

L'errore che sto ottenendo è (più o meno):

Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’

ho fatto Google, ma non riuscivo a trovare qualcosa. Non ho lo standard, e anche se l'ho fatto probabilmente mi prendere un bel po 'per trovare qualcosa di autorevole. Io non sono un avvocato, C ++ linguaggio.

È stato utile?

Soluzione

Ho preso uno sguardo alla serie, capitolo 9.2 sarebbe la quota di competenza. Non sono così grandi con BNF ma non ho visto nulla nella BNF per i membri della classe che indicano questo è stato permesso. L'identificatore è anche chiamato "non qualificata-id" nella BNF.

G ++ ha cambiato il comportamento nella versione 4.1, e apparentemente un sacco di altri compilatori accettato questo, ma non ho mai visto questo stile usato e non ho idea perché qualcuno dovrebbe farlo. Poiché sembra di non attivare un errore su una piuttosto ampia varietà di compilatori, ci può essere qualche ragione storica per questo stile, ma per quanto posso dire che è davvero non è valido.

L'unico buon riferimento che ho trovato tramite Google era questa pagina , che tenta solo di spiegare alcuni dei cambiamenti in G ++ 4.1.

Altri suggerimenti

Come Dan, ho guardato lo Standard senza risultati definitivi. Ho provato il codice con di Comeau on-line del compilatore (considerato compatibile con la maggior parte di serie al mondo) e ottenuto:

  

la linea 3: Errore: nome qualificato non è   consentito in dichiarazione di membro

Se siete interessati a prendere questo ulteriore, vi suggerisco di inviare una domanda sulla comp.lang.c ++. moderato newsgroup, in quanto vi sono molti più avvocati linguaggio C ++ là che ci sono qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top