单身人士的私人成员

时间:2012-07-29 16:54:41

标签: c++ singleton initialization member default-constructor

我有一个单身人士课程,我需要一个私人会员。我希望该成员为空,直到我使用我的setter方法设置正确的数据。

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();

};

Xcode在我的实现文件中给出了一个错误(我正在实现我的私有构造函数),说我应该初始化我的成员:

PlaybackHelper::PlaybackHelper(){

}

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

我不明白为什么我无法做到这一点(特别是因为它没有给我playback_type type;(enum)成员的任何错误以同样的方式工作)任何想法我能做什么在我准备为其分配值之前,请将我的Note成员留空?

3 个答案:

答案 0 :(得分:2)

错误消息很明显 - Note没有默认构造函数。使用现有构造函数创建一个或在初始化列表中初始化Note

  

我希望该成员为空,直到我使用setter方法设置正确的数据。

你做不到。创建对象时,noteplayback_type都存在。

答案 1 :(得分:2)

playback_type是一个普通的旧数据,因此缺少初始化type只会使其保持未初始化状态;但是,class Note的非默认构造函数已定义,因此如果您没有定义它,则不会自动生成其默认构造函数。 要解决它,你可以

  1. 使用您定义的(其中一个)非默认构造函数的参数初始化它。

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

  2. class Note

  3. 定义默认构造函数

答案 2 :(得分:0)

由于Note没有默认构造函数(即无参数构造函数),因此必须在成员初始化列表中将其初始化为:

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

}

根据note构造函数的要求,将适当的参数传递给Note。对于PlaybackHelper井的其他构造函数,你必须这样做。