2010-07-30 6 views
2

내가 CONST 회원이 명시 적으로 intialized해야 들었 컴파일하지만 나를 위해 다음과 같은 컴파일되지 않은 : 당신의 천국 '이후const 멤버는 명시 적으로 초기화하지만

int main() 
{ 
    someClass obj; 
    return 0; 
} 

:

class someClass 
{ 
    int const x; 
}; 

int main() 
{ 
    return 0; 
} 
+0

컴파일러 버전은 무엇입니까? – sukru

+0

최신 버전의 g ++. – user383352

답변

6

클래스에 const 한정 멤버 변수가있는 경우 해당 클래스에 대해 정의 된 모든 생성자에 대해 해당 변수는 생성자 이니셜 라이저 목록에서 초기화해야합니다. 정의 된 생성자가 const 한정 멤버 변수를 초기화하지 않으면 프로그램이 잘못 작성됩니다.

예제 코드에서 someClass에는 사용자가 선언 한 생성자가 없으므로 암시 적으로 선언 된 기본 생성자가 있습니다. 그러나 해당 생성자가 사용되지 않으면 정의되지 않습니다. someClass 개체를 인스턴스화하지 않으므로 생성자는 사용되지 않습니다. 따라서 예제 코드에는 오류가 없습니다.

당신은 const 멤버를 초기화

class someClass 
{ 
    someClass() { } // error, does not initialize const-qualified x 
    int const x; 
}; 

를 클래스에 대한 생성자를 정의하지했다거나 someClass의 인스턴스를 인스턴스화한다면 (암시 적으로 선언 된 기본 생성자를 야기하는 정의 할 경우), 프로그램이 잘못 형성 될 수 있습니다.

+2

당신이 "생성자를 정의하는"것을 의미한다고 생각합니까? – Jacob

+2

@Jacob : 파괴자 ... 생성자 ... 똑같은 거지? : -O 고마워. –

+0

롤, 문제 없음 :) – Jacob

4

이 시도 개체를 인스턴스화하지 않으면 컴파일러에서 오류가 발생하지 않습니다. x을 초기화하는 올바른 방법을 알고있을 것입니다.

class someClass 
{ 
    int const x; 
public: 
    someClass():x(10){} 
}; 
관련 문제