Errore del compilatore C2059

Aggiornamento: novembre 2007

Messaggio di errore

errore di sintassi: 'token'
syntax error : 'token'

Si è verificato un errore di sintassi a causa del token.

Per determinarne la causa esaminare, oltre alla riga indicata nel messaggio di errore, anche le righe precedenti. Nell'esempio riportato di seguito viene generato un messaggio di errore relativo alla riga in cui è dichiarato j, ma l'origine effettiva dell'errore è individuabile nella riga immediatamente precedente.

Se l'esame delle righe non consente di individuare la causa dell'errore, impostare come commento la riga elencata nel messaggio di errore ed eventualmente alcune righe precedenti.

Se il messaggio di errore si verifica su un simbolo che segue una variabile typedef, controllare che questa sia definita nel codice sorgente.

L'errore C2059 può venire generato se un simbolo viene valutato Nothing, ad esempio quando si esegue la compilazione con /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
}

È possibile che si verifichi l'errore C2059 anche quando si compila un'applicazione in cui viene specificata una struttura negli argomenti predefiniti di una funzione. È necessario che il valore predefinito per un argomento sia un'espressione. Un elenco di inizializzatori, come quello utilizzato per inizializzare una struttura, non è un'espressione. Per correggere l'errore, definire un costruttore per eseguire l'inizializzazione necessaria.

Nell'esempio seguente viene generato l'errore 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

È inoltre possibile che venga generato l'errore C2059 quando viene definita una classe template membro o una funzione esterna alla classe. Per ulteriori informazioni, vedere l'articolo della Knowledge Base Q241949 (informazioni in lingua inglese).

L'errore C2059 può verificarsi a causa di un cast specificato in modo non valido.

Nell'esempio seguente viene generato l'errore 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'errore C2059 può inoltre verificarsi se si tenta di creare un nome di spazio dei nomi contenente un punto.

Nell'esempio seguente viene generato l'errore C2059:

// C2059d.cpp
// compile with: /c
namespace A.B {}   // C2059

// OK
namespace A  {
   namespace B {}
}

È possibile che si verifichi l'errore C2059 anche quando si definisce una funzione o classe modello membro all'esterno della classe. Per ulteriori informazioni, vedere l'articolo della Knowledge Base Q241949 (informazioni in lingua inglese). Gli articoli della Knowledge Base sono disponibili nel CD di MSDN Library o all'indirizzo https://support.microsoft.com/?ln=IT.