Stavo compilando un programma C++ in Cygwin usando g ++ e avevo una classe il cui costruttore non aveva argomenti. Ho avuto le linee:Non ci sono parentesi su un costruttore senza argomenti uno standard di lingua?
MyClass myObj();
myObj.function1();
E quando si cerca di compilarlo, ho ricevuto il messaggio:
errore: richiesta di membro 'funzione1' in 'myObj', che è di tipo non-class 'MyClass()() '
Dopo una piccola ricerca, ho trovato che la correzione era quella di cambiare quella prima riga in MyClass myObj;
Potrei giurare che ho già fatto dichiarazioni di costruttore vuote con parentesi in C++. Questa è probabilmente una limitazione del compilatore che sto usando o lo standard del linguaggio dice veramente non usare le parentesi per un costruttore senza argomenti?
Espansione: è solo un problema in alcuni contesti. Scrivi "throw myexceptionclass();", ad esempio, e non c'è confusione. Il linguaggio è ambiguo nel contesto di Petes, ma le regole disambiguanti (la ragione per cui il linguaggio non è strettamente ambiguo) scelgono un'interpretazione. Ovviamente le regole disambiguanti significano che la lingua non è davvero ambigua - ma gli esperti di analisi lo dicono comunque, quindi sono autorizzato anche io! Le regole di disambiguazione più comuni in molte lingue sono per la precedenza e l'associatività degli operatori: C e C++ sono molto più ambigui e di conseguenza ci sono alcuni problemi strani. – Steve314