我有一个单身人士课程,我需要一个私人会员。我希望该成员为空,直到我使用我的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成员留空?
答案 0 :(得分:2)
错误消息很明显 - Note
没有默认构造函数。使用现有构造函数创建一个或在初始化列表中初始化Note
。
我希望该成员为空,直到我使用setter方法设置正确的数据。
你做不到。创建对象时,note
和playback_type
都存在。
答案 1 :(得分:2)
playback_type
是一个普通的旧数据,因此缺少初始化type
只会使其保持未初始化状态;但是,class Note
的非默认构造函数已定义,因此如果您没有定义它,则不会自动生成其默认构造函数。
要解决它,你可以
使用您定义的(其中一个)非默认构造函数的参数初始化它。
PlaybackHelper::PlaybackHelper() : note(/*...*/)
{
}
为class Note
答案 2 :(得分:0)
由于Note
没有默认构造函数(即无参数构造函数),因此必须在成员初始化列表中将其初始化为:
PlaybackHelper::PlaybackHelper() : note(/*..args...*/)
{ //^^^^^^^^^^^^^^^^^^^^member initialization
}
根据note
构造函数的要求,将适当的参数传递给Note
。对于PlaybackHelper
井的其他构造函数,你必须这样做。