2017-10-29 5 views
0

私は派生クラスを介してベースクラスのメンバ項目を初期化しようとしています。私が持っている問題は、私が渡している値が "x"に依存しているということです。あなただけに、基本クラスを初期化することができ、私は間違って何をやっている派生コンストラクタの中括弧内のベースコンストラクタを初期化するにはどうすればよいですか? C++

+0

あなたは、基本クラスでコンストラクタベース::ベース(P pを)を定義しました – HJuls2

+0

? @ HJuls2 - 定義されていますが、 'Base()'はありませんが、t彼はエラーを示します。 'Base(p);はc'tor呼び出しではありません。これは、 'Base'型の' p'という名前のオブジェクトを定義し、デフォルトの構築を試みます。 – StoryTeller

+0

Base(p)はコンストラクタ呼び出しです。 Base :: Base(P p); –

答えて

3

を私はエラー「はデフォルトコンストラクタがクラスに存在しない 『ベース』を取得

Derived:: Derived() 
{ 
    uint8 number = getNumber(); 
    P p; 

    if (number == 3) 
    { 
     p = P1; 
    } 
    else 
    { 
    p = P2; 
    } 

    Base(p); 
} 

を:?。 はので、ここで私がやっているものですコンストラクタのメンバー初期化子リストのシーケンスそれは他のいくつかのコードを呼び出す必要がある場合は、ヘルパー関数にあることを委任することができます。

P calculate_p() { 
    uint8 number = getNumber(); 
    if (number == 3) 
    return P1; 

    return P2; 
} 

Derived::Derived() : Base(calculate_p()) 
{ 
} 
+0

、calculate_pはクラスDの一部ではありませんか? –

+0

@NoaRegev - あなたのコードサンプルは、そうでなければならないと示していませんでした。可能な限りもっともらしいカップリングで行くのが最善です。 'calculate_p'がクラスへのアクセスを必要としない場合は、それを隠しユーティリティフリー関数にすることをお勧めします。 – StoryTeller

+0

これは動作します。 –

関連する問題