Erreur du compilateur C2059
Mise à jour : novembre 2007
Message d'erreur
erreur de syntaxe : 'jeton'
syntax error : 'token'
Le jeton a causé une erreur de syntaxe.
Pour déterminer la cause, examinez non seulement la ligne énumérée dans le message d'erreur, mais aussi les lignes au-dessus. L'exemple ci-dessous génère un message d'erreur pour la ligne déclarant j, mais la source de l'erreur apparaît sur la ligne située juste au-dessus.
Si l'examen des lignes ne donne aucun indice sur l'origine du problème, essayez de mettre en commentaires la ligne énumérée dans le message d'erreur et éventuellement plusieurs lignes au-dessus.
Si le message d'erreur apparaît sur un symbole suivant immédiatement une variable typedef, vérifiez que la variable est définie dans le code source.
Vous pouvez obtenir l'erreur C2059 si un symbole a une valeur nulle, comme cela peut se produire lors d'une compilation avec /Dsymbol**=**.
// C2059a.cpp
// compile with: /DTEST=
#include <stdio.h>
int main() {
#ifdef TEST
printf_s("\nTEST defined %d", TEST); // C2059
#else
printf_s("\nTEST not defined");
#endif
}
Une autre raison particulière d'apparition de l'erreur C2059 est la compilation d'une application spécifiant une structure dans les arguments par défaut d'une fonction. La valeur par défaut d'un argument doit être une expression. Une liste d'initialiseurs, telle que celle qui est utilisée pour initialiser une structure, n'est pas une expression. La solution consiste à définir un constructeur pour effectuer l'initialisation requise.
L'exemple suivant génère C2059 :
// C2059b.cpp
// compile with: /c
struct ag_type {
int a;
float b;
// Uncomment the following line to resolve.
// ag_type(int aa, float bb) : a(aa), b(bb) {}
};
void func(ag_type arg = {5, 7.0}); // C2059
void func(ag_type arg = ag_type(5, 7.0)); // OK
L'erreur C2059 peut aussi apparaître si vous définissez une classe de modèles membres ou une fonction en dehors de la classe. Consultez l'article Q241949 de la Base de connaissances Microsoft pour plus d'informations.
L'erreur C2059 peut se produire en présence d'un cast de format incorrect.
L'exemple suivant génère l'erreur C2059 :
// C2059c.cpp
// compile with: /clr
using namespace System;
ref class From {};
ref class To : public From {};
int main() {
From^ refbase = gcnew To();
To^ refTo = safe_cast<To^>(From^); // C2059
To^ refTo2 = safe_cast<To^>(refbase); // OK
}
L'erreur C2059 peut également se produire si vous essayez de créer un nom d'espace de noms qui contient un point.
L'exemple suivant génère l'erreur C2059 :
// C2059d.cpp
// compile with: /c
namespace A.B {} // C2059
// OK
namespace A {
namespace B {}
}
L'erreur C2059 peut également se produire si vous définissez une classe ou une fonction de modèle membre à l'extérieur de la classe. Consultez l'article Q241949 de la Base de connaissances Microsoft pour plus d'informations. Vous trouverez les articles de la Base de connaissances sur le CD-ROM de MSDN Library ou à l'adresse https://www.microsoft.com/france/support.