2009-12-15 5 views
2

2 개의 OOP C# 클래스를 사용했지만 현재는 교수가 C++로 전환하고 있습니다. 그래서, C의 ++에 익숙해,이 매우 간단한 프로그램을 작성,하지만 난이 오류가 계속 : 내가 바로 내 기본 생성자를 코딩 한 믿기 때문에이 생성자 오류를 제거하는 방법은 무엇입니까?

error C2533: 'Counter::{ctor}' : constructors not allowed a return type

내가, 혼란 스러워요.

class Counter 
{ 
private: 
int count; 
bool isCounted; 

public: 
Counter(); 
bool IsCountable(); 
void IncrementCount(); 
void DecrementCount(); 
int GetCount(); 
} 

Counter::Counter() 
{ 
count = 0; 
isCounted = false; 
} 

bool Counter::IsCountable() 
{ 
if (count == 0) 
    return false; 
else 
    return true; 
} 

void Counter::IncrementCount() 
{ 
count++; 
isCounted = true; 
} 

void Counter::DecrementCount() 
{ 
count--; 
isCounted = true; 
} 

int Counter::GetCount() 
{ 
return count; 
} 

내가 잘못을하고있는 중이 야 무엇 :

다음은 간단한 카운터 클래스 내 코드입니까? 반환 유형을 지정하지 않습니다. 아니면 내가 어떻게 든?

+1

* 초기화 목록 *에 읽어주십시오 http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=172 –

+0

좋아을 나는 것입니다. – Alex

+0

IsCountable은'return count == 0'으로 단순화 될 수 있습니다. BTW, 읽지 않은 (사용 된) 경우 왜 멤버 'isCounter'가 있습니까? –

답변

14

클래스 정의 끝에 세미콜론을 잊어 버렸습니다. 세미콜론이 없으면 컴파일러는 방금 정의한 클래스가 소스 파일에서 그 다음에 나오는 생성자의 반환 유형이라고 생각합니다. 이것은 일반적인 C++ 오류로 솔루션을 암기하고 다시 필요합니다.

class Counter 
{ 
private: 
int count; 
bool isCounted; 

public: 
Counter(); 
bool IsCountable(); 
void IncrementCount(); 
void DecrementCount(); 
int GetCount(); 
}; 
+0

와우. 그거였다. C++에서는 클래스 정의 다음에 세미콜론이 필요합니까? – Alex

+0

여기서 GCC가 빛나는 곳입니다. "참고 :(아마도 Counter의 정의 이후에 세미콜론이 누락되었습니다)" –

+0

@Alex 예 - C에서 구조체 정의 이후에 필요 하듯이 –

1

클래스 선언을 세미콜론으로 끝내야합니다.

class Counter 
{ 
private: 
int count; 
bool isCounted; 

public: 
Counter(); 
bool IsCountable(); 
void IncrementCount(); 
void DecrementCount(); 
int GetCount(); 
} ; 
관련 문제