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.