Compilerfehler C2059

Aktualisiert: November 2007

Fehlermeldung

Syntaxfehler: 'Token'
syntax error : 'token'

Das Token hat einen Syntaxfehler verursacht.

Um die Ursache zu ermitteln, überprüfen Sie nicht nur die in der Fehlermeldung aufgeführte Zeile, sondern auch die darüber liegenden Zeilen. Im folgenden Beispiel wird die Fehlermeldung für die Zeile erzeugt, in der j deklariert wird. Die wirkliche Fehlerursache ist jedoch eine Zeile darüber zu finden.

Wenn Sie bei der Überprüfung der entsprechenden Zeilen keinen Hinweis auf die Fehlerursache finden, kommentieren Sie die in der Fehlermeldung angegebene und u. U. auch einige darüber liegende Zeilen aus.

Wenn die Fehlermeldung in einem Symbol auftritt, das unmittelbar auf eine typedef-Variable folgt, stellen Sie sicher, dass die Variable im Quellcode definiert ist.

Wenn eine Symbolauswertung keinen Wert ergibt, kann – wie bei der Kompilierung mit /Dsymbol**=** – der Fehler C2059 ausgegeben werden.

// 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
}

Ein weiterer spezifischer Grund für die Fehlermeldung C2059 liegt im folgenden Fall vor: Sie kompilieren eine Anwendung, durch die eine Struktur in den Standardargumenten für eine Funktion angegeben wird. Der Standardwert für ein Argument muss ein Ausdruck sein. Eine Initialisiererliste wie diejenige, die zum Initialisieren einer Struktur verwendet wird, ist kein Ausdruck. Die Lösung besteht in der Definition eines Konstruktors, der die erforderliche Initialisierung durchführt.

Im folgenden Beispiel wird C2059 generiert:

// 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

Die Fehlermeldung C2059 kann auch ausgegeben werden, wenn Sie eine Membervorlagenklasse oder -funktion außerhalb der Klasse definieren. Weitere Informationen finden Sie im Artikel Q241949 der Knowledge Base (nur auf Englisch verfügbar).

C2059 kann bei einer falsch formatierten Typumwandlung auftreten.

Im folgenden Beispiel wird C2059 generiert:

// 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
}

C2059 kann auch bei dem Versuch auftreten, einen Namespacenamen zu erzeugen, der einen Punkt enthält.

Im folgenden Beispiel wird C2059 generiert:

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

// OK
namespace A  {
   namespace B {}
}

Außerdem kann C2059 auftreten, wenn Sie eine Membervorlagenklasse oder eine Funktion außerhalb der Klasse definieren. Weitere Informationen finden Sie im Artikel Q241949 der Knowledge Base (nur auf Englisch verfügbar). Knowledge Base-Artikel finden Sie auf der MSDN Library-CD-ROM oder unter https://support.microsoft.com/?in=de.