컴파일러 오류 C2059

구문 오류 : 'token'

토큰으로 인해 구문 오류가 발생했습니다.

다음 예제에서는 선언 된 줄에 대 한 오류 메시지를 생성 합니다. j.

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

오류의 원인을 확인 하려면 오류 메시지에 나열 된 줄 뿐 아니라 위에 있는 줄 들도 검사 합니다.줄 검사 아무런 문제에 대 한 단서 오류 메시지에 표시 된 줄과 위에 몇 줄을 주석 처리 하면.

오류 메시지 바로 다음에 오는 기호에 발생 하는 경우는 typedef 변수를 소스 코드에서 변수는 정의 되었는지 확인 합니다.

기호가 nothing으로 발생할 수도 있으므로 이면 c2059 때 /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
}

함수의 기본 인수에 구조체를 지정 하는 응용 프로그램을 컴파일할 때 c 2059에 발생할 수 있는 또 다른 경우가입니다.인수의 기본값은 반드시 식이어야 합니다.이니셜라이저 목록을-하나는 구조체를 초기화 하는 데 예를 들어,-식이 아닙니다.이 문제를 해결 하려면 필요한 초기화를 수행 하는 생성자를 정의 합니다.

다음 예제는 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

클래스 외부에 멤버 템플릿 클래스나 함수를 정의할 경우에도 C2059 오류가 발생할 수 있습니다.에 대 한 내용은 기술 자료 문서 241949.

C2059는 형식이 잘못된 캐스트에 대해 발생할 수 있습니다.

다음 샘플에서는 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는 마침표가 포함된 네임스페이스 이름을 만들려는 경우에도 발생할 수 있습니다.

다음 샘플에서는 C2059 경고가 발생하는 경우를 보여 줍니다.

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

// OK
namespace A  {
   namespace B {}
}

C 2059는 연산자의 이름을 정규화 할 수 있습니다 때 발생할 수 있습니다 (::, ->, 및 .) 키워드가 야 합니다. template,이 예제와 같이:

template <typename T> struct Allocator {
    template <typename U> struct Rebind {
        typedef Allocator<U> Other;
    };
};

template <typename X, typename AY> struct Container {
    typedef typename AY::Rebind<X>::Other AX; // error C2059
};

기본적으로 c + + 가정 AY::Rebind 없는 템플릿. 따라서 다음 < 은 작은으로 해석-기호.컴파일러는 명시적으로 지시 해야 Rebind 꺾쇠 괄호 올바르게 구문 분석할 수 있도록 하는 템플릿입니다.이 오류를 해결 하려면 사용 하는 template 키워드는 종속 형식 이름에 다음과 같이:

template <typename T> struct Allocator {
    template <typename U> struct Rebind {
        typedef Allocator<U> Other;
    };
};

template <typename X, typename AY> struct Container {
    typedef typename AY::template Rebind<X>::Other AX; // correct
};