컴파일러 오류 C2059
업데이트: 2007년 11월
오류 메시지
구문 오류 : 'token'
syntax error : 'token'
토큰으로 인해 구문 오류가 발생했습니다.
원인을 알아보려면 오류 메시지에 기록된 줄뿐 아니라 위에 있는 줄들도 검사하십시오. 다음 예제는 j를 선언하는 줄에 대한 오류 메시지를 생성하지만 오류의 소스는 해당 줄의 바로 윗 줄에 표시됩니다.
해당 줄을 검사해도 문제에 대한 아무런 단서를 얻지 못하면 오류 메시지에 표시된 줄과 위에 있는 줄 중 예상되는 몇 줄을 주석 처리하십시오.
오류 메시지가 typedef 변수 바로 다음에 오는 기호에 대해 발생하는 경우에는 이 변수가 소스 코드 내에서 정의되었는지 확인합니다.
/Dsymbol**=**을 사용하여 컴파일할 때와 같이 기호가 어떤 값으로도 계산되지 않으면 C2059 오류가 발생할 수 있습니다.
// 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
}
함수의 기본 인수에 구조체를 지정하는 응용 프로그램을 컴파일할 때에도 C2059 오류가 발생할 수 있습니다. 인수의 기본값은 반드시 식이어야 합니다. 구조체를 초기화하는 데 사용되는 이니셜라이저 목록은 식이 아닙니다. 해결 방법: 생성자가 필수 초기화를 수행하도록 정의하십시오.
다음 예제는 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 오류가 발생할 수 있습니다. 자세한 내용은 기술 자료 문서 Q241949를 참조하십시오.
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 {}
}
C2059는 클래스 외부에서 멤버 템플릿 클래스나 함수를 정의하는 경우에도 발생할 수 있습니다. 자세한 내용은 기술 자료 문서 Q241949를 참조하십시오. 기술 자료 문서는 MSDN Library CD-ROM이나 https://support.microsoft.com에 있습니다.