J'ai commencé à recevoir l'erreur, "erreur C2059: erreur de syntaxe: 'argument par défaut'" pour une ligne de code qui a déclaré une fonction avec un argument de chaîne auquel un paramètre par défaut a été donné . C'était évidemment un peu frustrant, car le message d'erreur n'était pas vraiment éclairant (je sais que c'est un 'argument par défaut'!), Et la déclaration exacte fonctionnerait ailleurs. Après avoir légèrement décalé la déclaration par rapport à la déclaration, j'ai trouvé que sa position dans la classe qui la contient avait effectivement un effet. En rétrécissant, j'ai constaté que je déclarais une fonction différente quelque peu erronée, en incluant un point-virgule après l'un des ses paramètres par défaut. Le compilateur semblait parfaitement bien avec ça, ce qui semblait un peu étrange. J'ai étudié un peu plus, et est venu avec le cas de test suivant pour essayer de comprendre l'essence de ce qui se passait:Erreur de syntaxe subtile dans le paramètre par défaut non capturé par le compilateur
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 = "");
};
Comme le code est au-dessus, Func2 produira l'erreur de compilation je l'ai mentionné ci-dessus. Si je déplace Func2 au dessus de Func1, alors tout se compile bien.
Si je mets le paramètre par défaut dans Func1 à un nombre explicite ou utilise une énumération déclarée dans TestClass, alors j'obtiens une erreur de syntaxe attendue pour cette ligne.
Donc, essentiellement, la chose étrange semble que si je mets une valeur de paramètre par défaut à un ENUM pas défini directement dans la classe actuelle et je suis un peu trop des points-virgules heureux, le compilateur ignorer l'erreur de syntaxe, jusqu'à ce qu'une autre chose apparemment sans rapport provoque finalement la mort de l'analyseur d'une manière très impénétrable.
Est-ce que je manque quelque chose complètement? Est-ce que ce comportement est attendu? J'hésite à dire que c'est un bogue dans le compilateur, mais cela ne semble guère correct. Si c'est juste que je me méprends sur la norme, alors j'aimerais savoir où je me trompe.
Je reçois la même erreur de compilation si Func1 est au-dessus ou au-dessous de Func2, en utilisant gcc 3.4.4. – Beta
C'est bon à savoir. Je n'ai pas un moyen facile d'essayer différents compilateurs mis en place pour le moment. –