-1

我有一个单身班级,我需要一个私人成员。我希望该成员为空,直到我使用我的 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;以相同方式工作的(枚举)成员的错误)我可以做些什么来让我的 Note 成员为空直到我我准备好给它赋值了吗?

4

3 回答 3

2

错误消息很清楚 - 没有默认构造函数Note。要么创建一个,要么Note在初始化列表中使用现有的构造函数进行初始化。

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

你不能。创建对象时两者都note存在。playback_type

于 2012-07-29T16:57:02.847 回答
2

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

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

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

  2. 定义一个默认构造函数class Note

于 2012-07-29T17:03:37.020 回答
0

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

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

}

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

于 2012-07-29T16:58:06.800 回答