출처: http://blog.naver.com/PostView.nhn?blogId=sainthkh&logNo=140063257447
클래스 선언과 관련된 몇가지 알고나면 어이없는 오류들[1] C2236
![]() ![]() 2009/02/17 18:52
|
error C2236: unexpected 'class' 'B'. Did you forget a ';'?
error C2143: syntax error : missing ';' before ':'
error C2059: syntax error : ':'
이 오류가 뜰 때에는 대체로 이 세가지 정도가 같이 뜹니다.
이 문제는 class 선언 끝에 ;을 붙이지 않았기 때문에 생깁니다.
그런데 이게 조금 찾기 어려운 경우가 있습니다.
--------------------------------------------------------------------------------------------
<A.h>
#ifndef CLASS_A
#define CLASS_A
#include <stdio.h>
class A
{
private:
int x;
public:
void f() { printf("A::f()"); }
}
#endif // CLASS_A
<B.h>
#ifndef CLASS_B
#define CLASS_B
#include "A.h"
class B : public A
{
private:
int a;
public:
void g() { printf("B::g()"); }
};
#endif // CLASS_B
<main.cpp>
#include "A.h"
#include "B.h"
void main()
{
A a;
B b;
a.f();
b.g();
}
-------------------------------------------------------------------------------------------
단순한 클래스 A를 선언하고 또 단순한 클래스 B를 A에서 상속받습니다. 그리고 main()에서 A와 B를 사용해 봅니다.
그런데 이 프로그램의 문제는 A 클래스 끝에 ;이 없다는 것인데,
오류는 B클래스에 뜹니다. (실제로 Visual Studio에서 쳐 보면 B 클래스에 위에서 소개한 오류가 뜹니다.)
이렇게 #include를 통해 파일을 건너서 문제가 생기는 경우는 참 잡기 어렵습니다.
C2236이 생겼을 경우 어딘가 ;이 붙지 않았구나 생각하시고 잘 찾아보시기 바랍니다.
struct와 enum이 끝날 때에도 붙여야 하니 절대로 잊지 마시기 바랍니다.
(자바를 하다가 C++을 하게 되면 자주 잊게 되는 부분 중에 하나죠....)
error C2143: syntax error : missing ';' before ':'
error C2059: syntax error : ':'
이 오류가 뜰 때에는 대체로 이 세가지 정도가 같이 뜹니다.
이 문제는 class 선언 끝에 ;을 붙이지 않았기 때문에 생깁니다.
그런데 이게 조금 찾기 어려운 경우가 있습니다.
--------------------------------------------------------------------------------------------
<A.h>
#ifndef CLASS_A
#define CLASS_A
#include <stdio.h>
class A
{
private:
int x;
public:
void f() { printf("A::f()"); }
}
#endif // CLASS_A
<B.h>
#ifndef CLASS_B
#define CLASS_B
#include "A.h"
class B : public A
{
private:
int a;
public:
void g() { printf("B::g()"); }
};
#endif // CLASS_B
<main.cpp>
#include "A.h"
#include "B.h"
void main()
{
A a;
B b;
a.f();
b.g();
}
-------------------------------------------------------------------------------------------
단순한 클래스 A를 선언하고 또 단순한 클래스 B를 A에서 상속받습니다. 그리고 main()에서 A와 B를 사용해 봅니다.
그런데 이 프로그램의 문제는 A 클래스 끝에 ;이 없다는 것인데,
오류는 B클래스에 뜹니다. (실제로 Visual Studio에서 쳐 보면 B 클래스에 위에서 소개한 오류가 뜹니다.)
이렇게 #include를 통해 파일을 건너서 문제가 생기는 경우는 참 잡기 어렵습니다.
C2236이 생겼을 경우 어딘가 ;이 붙지 않았구나 생각하시고 잘 찾아보시기 바랍니다.
struct와 enum이 끝날 때에도 붙여야 하니 절대로 잊지 마시기 바랍니다.
(자바를 하다가 C++을 하게 되면 자주 잊게 되는 부분 중에 하나죠....)