-1

プライベート メンバーが必要なシングルトン クラスがあります。セッターメソッドを使用して正しいデータを設定するまで、そのメンバーを空にしておきます。

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メンバーを空のままにするためにできるアイデア値を割り当てる準備はできましたか?

4

3 に答える 3

2

エラー メッセージは明確です - の既定のコンストラクタはありませんNote。作成するかNote、既存のコンストラクターを使用して初期化子リストで初期化します。

セッターメソッドを使用して正しいデータを設定するまで、そのメンバーを空にしておきます。

できません。オブジェクトを作成するnoteと、 との両方が存在します。playback_type

于 2012-07-29T16:57:02.847 に答える
2

playback_typeは単純な古いデータであるため、初期化typeを行わないと単純に未初期化のままになります。ただし、class Noteのデフォルト以外のコンストラクターが定義されているため、定義しないとデフォルトのコンストラクターは自動的に生成されません。それを解決するには、次のいずれかを実行できます

  1. ユーザーが定義したデフォルト以外のコンストラクター (の 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 に答える