Partilhar via


Erro de Compilador C2059

Erro de sintaxe: 'token'

O token causou um erro de sintaxe.

O exemplo a seguir gera uma mensagem de erro para a linha declarar j.

// C2059e.cpp
// compile with: /c
// C2143 expected
// Error caused by the incorrect use of '*'.
   int j*; // C2059 

Para determinar a causa do erro, examine não apenas a linha listada na mensagem de erro, mas também as linhas acima dela. Se as linhas de examinar não produz nenhuma idéia do que o problema pode ser, tente comentar a linha listada na mensagem de erro e possivelmente de várias linhas acima dela.

Se a mensagem de erro ocorre em um símbolo imediatamente após um typedef variável, verificação de que a variável é definida no código fonte.

Você pode obter o C2059 se um símbolo é avaliada como nothing, pode ocorrer quando você compilar com /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
}

Outro motivo específico, que você pode obter o C2059 é quando você compilar um aplicativo que especifica uma estrutura nos argumentos padrão para uma função. O valor padrão para um argumento deve ser uma expressão. Uma lista do inicializador, tais como os usados para inicializar uma estrutura não é uma expressão. A resolução é definir um construtor para executar a inicialização necessária.

O exemplo a seguir gera 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

Você também pode obter o C2059 se você definir uma classe de modelo do membro ou uma função fora da classe. Consulte o artigo Q241949 do Knowledge Base para obter mais informações.

C2059 pode ocorrer por um elenco mal formados.

O exemplo a seguir gera 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
}

C2059 também pode ocorrer se você tentar criar um nome de espaço para nome que contenha um ponto.

O exemplo a seguir gera C2059:

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

// OK
namespace A  {
   namespace B {}
}

C2059 também pode ocorrer se você definir uma classe de modelo do membro ou uma função fora da classe. Consulte o artigo Q241949 do Knowledge Base para obter mais informações. Você pode encontrar artigos do Knowledge Base em CD-ROM do Biblioteca MSDN ou https://support.microsoft.com.