Ho iniziato a ricevere l'errore, "errore C2059: errore di sintassi: 'argomento predefinito'" per una riga di codice che ha dichiarato una funzione con un argomento stringa a cui è stato assegnato un parametro predefinito . Questo era ovviamente un po 'frustrante, poiché il messaggio di errore non era esattamente illuminante (so che è un' argomento predefinito '!), E la dichiarazione esatta funzionerebbe altrove.Errore di sintassi sottile nel parametro predefinito non rilevato dal compilatore
Dopo aver spostato un po 'la dichiarazione, ho trovato che la sua posizione nella sua classe contenente ha effettivamente avuto un effetto. Restringendolo, ho scoperto che stavo dichiarando una funzione diversa in qualche modo erroneamente, includendo un punto e virgola dopo uno di i suoi parametri di default. Il compilatore sembrava perfettamente a posto, il che sembrava un po 'strano. Ho studiato un po 'di più, e si avvicinò con la seguente banco di prova per cercare di capire l'essenza di quello che stava succedendo:
enum TestEnum1
{
TEST_ONE
};
class TestClass
{
public:
enum TestEnum2
{
TEST_TWO,
TEST_THREE,
TEST_FOUR
};
void Func1(int iParm = TEST_ONE;); // additional semicolon here
void Func2(std::string strParm = "");
};
Come il codice sta al di sopra, Func2 produrrà l'errore di compilazione che ho citato sopra. Se sposto Func2 sopra Func1, allora tutto si compila bene.
Se posso passare il parametro predefinito in Func1 ad un numero esplicito o utilizzare un enum dichiarato all'interno TestClass, tanto sono un errore di sintassi prevista per quella linea.
Quindi, in sostanza, la cosa strana sembra essere che se ho impostato il valore di un parametro di default per un enum non definito direttamente nella classe corrente e sono un po 'troppo virgola-felice, il compilatore ignorerà l'errore di sintassi, fino a quando un'altra cosa apparentemente non correlata alla fine fa sì che il parser muoia in un modo molto imperscrutabile.
Mi manca qualcosa di completamente? È questo comportamento previsto? Sono riluttante a chiamarlo un bug nel compilatore, certamente, ma questo sembra appena corretto. Se sono solo io a fraintendere qualcosa sullo standard, mi piacerebbe sapere dove mi sbaglio.
Viene visualizzato lo stesso errore di compilazione se Func1 è sopra o sotto Func2, utilizzando gcc 3.4.4. – Beta
Buono a sapersi. Non ho un modo semplice per provare diversi compilatori impostati in questo momento. –