2010-12-03 5 views
10

이것은 아마도 엄청나게 쉬운 질문 일 텐데, 나는 잠시 동안 대답을 찾고 있었지만 아직 이해할 수는 없습니다. 클래스에서 상수 변수 상수 포인터를 초기화하려고합니다. 여기에 헤더 파일입니다클래스의 초기화되지 않은 상수 멤버

class Scheduler{ 
    public: 
    Scheduler(); 
    explicit Scheduler(unsigned long *); 

    private: 
    const unsigned long *const thresh; 

}; 

는 그리고 여기 클래스

Scheduler::Scheduler(unsigned long * threshold): 
    thresh(threshold) 
{} 

나는이 오류로 실행이 코드를 컴파일하려고 시도에 대한 생성자입니다 :

scheduler.cpp: In constructor ‘Scheduler::Scheduler()’: 
scheduler.cpp:3: error: uninitialized member ‘Scheduler::thresh’ with ‘const’ type ‘const long unsigned int* const’ 

여러 소스를 멤버 변수에 대한 생성자에서 상수 멤버 변수를 논의하는 온라인에서는 이니셜 라이저 목록을 사용합니다. 나는 내가해야 할 일을하고 있다고 생각하지만 분명히 여전히 좋지 않다. 아무도 틀린 것을 볼 수 있습니까?

+0

코드가 오류가 발생하는 기본 생성자 구현이 누락 된 것 같습니다. – visitor

답변

14

ALL 생성자의 상수원을 초기화해야합니다. 당신은 논쟁이있는 사람을 위해서만 그것을하고 있습니다. 그것도 기본값으로해라. 그러면 모든 것이 fne이 될 것이다. 이 특별한 경우, thresh를 0으로 초기화하거나 기본 생성자를 비활성화하십시오.

+0

이것은 정확히 내가 필요한 것입니다. 감사! –

6

문제는 기본 생성자에, 그것은

Scheduler::Scheduler() : thresh(0) {} 

여부를 전혀 구현 될 수 있어야합니다.

0

귀하의 코드는 저에게 적합합니다 (MSVC2010) - 필자는 그렇게 생각합니다. 어떤 컴파일러에서 이것을 사용하고 있습니까?
컴파일러가 코드에 대해 가질 수있는 유일한 불만 사항은 const 멤버로 인해 자동 복사 생성자와 할당 연산자를 만들 수 없다는 경고입니다.

+0

VC++의 "어리석은 경고"를 말하는 것 같습니다. 이런 일들에 대해 경고하는 것은별로 의미가 없습니다. – visitor

+0

귀하의 마일리지는 물론 다를 수 있습니다 ;-) 그래도, 난 내 대답에 기본 ctor가 누락되었습니다 - 다른 포스터는 너무 const 회원을 초기화해야한다는 말이 맞습니다. – BuschnicK

+0

경고를 어떻게 수정합니까? 'boost :: noncopyable'을 상속하여 클래스가 복사 가능/할당 가능으로되어 있지 않음을 나타냅니다 ... 두 개의 새로운 경고 : 이제는 암시 적 복사 생성자를 만들 수 없습니다! 오. – UncleBens

관련 문제