2012-07-29 2 views
-1

개인 멤버가 필요한 싱글 톤 클래스가 있습니다. 올바른 데이터를 설정하기 위해 setter 메서드를 사용할 때까지 해당 멤버가 비어 있어야합니다.싱글 톤 클래스 전용 멤버

PlaybackHelper::PlaybackHelper(){ 

} 

error: Semantic Issue: Constructor for 'PlaybackHelper' must explicitly initialize the member 'note' which does not have a default constructor

내가 돈 '(나는 내 ​​개인 생성자를 구현하고있어 경우)

class PlaybackHelper{ 
private: 
    PlaybackHelper(); 
    PlaybackHelper(PlaybackHelper const&); 
    void operator=(PlaybackHelper const&); 

    playback_type type; 

    Note note; 
public: 
    void setPlaybackType(playback_type aType); 
    static PlaybackHelper &getInstance(); 

}; 

엑스 코드는 내 멤버를 초기화해야한다는 내 구현 파일에 나에게 오류를주고있다 왜 내가 이것을 할 수 없다는 것을 이해해야한다. (같은 방식으로 작동하는 playback_type type; (enum) 멤버에 대해 어떤 에러도주지 않기 때문에) 준비가 될 때까지 노트 회원을 비워 둘 수있는 아이디어 그것에 가치를 할당하는 것?

+0

객체에 대한 기본 생성자를 정의합니다. 그렇지 않니? – Torsten

답변

3

playback_type은 일반 오래된 데이터이므로 초기화가 부족하여 type이 초기화되지 않은 상태로 남습니다. 그러나 class Note의 기본이 아닌 생성자가 정의되어 있으므로 기본 생성자가 정의되지 않은 경우 자동으로 생성되지 않습니다. 당신이 중 하나를

  1. 가의 매개 변수가 정의한 기본이 아닌 생성자 (중 하나)으로 초기화 할 수, 그것을 해결합니다.

    PlaybackHelper::PlaybackHelper() : note(/*...*/) { }

  2. 는 오류 텍스트를 읽은 후 분명히입니다, 기본 생성자가없는 타입의 노드의 class Note

2

오류 메시지가 분명합니다. Note에 대한 기본 생성자가 없습니다. 하나를 만들거나 기존 생성자가있는 이니셜 라이저 목록에서 Note을 초기화하십시오.

올바른 데이터를 설정하기 위해 setter 메서드를 사용할 때까지 해당 멤버가 비어 있어야합니다.

수 없습니다. 개체를 만들 때 noteplayback_type이 모두 존재합니다. Note에서 요구하는 note에 적절한 인수 (들)을 통과

PlaybackHelper::PlaybackHelper() : note(/*..args...*/) 
{        //^^^^^^^^^^^^^^^^^^^^member initialization 

} 

: Note 이후

0

는 기본 생성자 (즉, 매개 변수가없는 생성자)가없는, 당신은 멤버 초기화 목록에 초기화해야 건설자. PlaybackHelper 우물의 다른 생성자에 대해서도 똑같이해야합니다.