私は派生クラスを介してベースクラスのメンバ項目を初期化しようとしています。私が持っている問題は、私が渡している値が "x"に依存しているということです。あなただけに、基本クラスを初期化することができ、私は間違って何をやっている派生コンストラクタの中括弧内のベースコンストラクタを初期化するにはどうすればよいですか? C++
答えて
を私はエラー「はデフォルトコンストラクタがクラスに存在しない 『ベース』を取得
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())
{
}
、calculate_pはクラスDの一部ではありませんか? –
@NoaRegev - あなたのコードサンプルは、そうでなければならないと示していませんでした。可能な限りもっともらしいカップリングで行くのが最善です。 'calculate_p'がクラスへのアクセスを必要としない場合は、それを隠しユーティリティフリー関数にすることをお勧めします。 – StoryTeller
これは動作します。 –
- 1. C++でコンストラクタ内のオブジェクトを初期化するにはどうすればよいですか?
- 2. クラスインスタンスを中括弧で初期化する
- 3. 派生クラスのコピーコンストラクタ内で、ベースコンストラクタを明示的に初期化する際の警告を無効にする
- 4. C:中括弧で配列の内部構造体を初期化できないのはなぜですか?
- 5. メンバーを中括弧で初期化する方法はありますか?
- 6. 派生コンストラクタからベースコンストラクタをコールしないとどうなりますか?
- 7. astyleは配列の初期化中括弧を処理できますか?
- 8. C++メソッドの中括弧を書式設定するにはどうすればよいですか?
- 9. 括弧で初期化されたオブジェクトのC++タイプ
- 10. C#で派生クラスを初期化するには?
- 11. 括弧の初期化と括弧のバグ
- 12. IntelliJの中括弧と中括弧を接続する線を表示するにはどうすればよいですか?
- 13. タイルのタイルの配列を中括弧で初期化します
- 14. コンストラクタでクラスのメンバー配列を初期化するにはどうすればいいですか?
- 15. eclipseで中括弧({})の自動作成を無効にするにはどうすればよいですか?
- 16. C#拡張関数内で値(== null)を初期化するにはどうすればよいですか?
- 17. このようなマップをC++で初期化するにはどうすればよいでしょうか?
- 18. C++エラー: "配列は、中括弧で囲まれたイニシャライザで初期化する必要があります"
- 19. VIM:閉じ括弧のようにブロックに括られた閉じ括弧を取得するにはどうすればよいですか?
- 20. 一様な初期化はどのようにすればよいですか?
- 21. IDEAの自動閉鎖中括弧を無効にするにはどうすればよいですか?
- 22. C++クラス、コンストラクタの初期化中に値を代入する
- 23. 角括弧内のJsonレスポンスを解析するにはどうすればよいですか?
- 24. コピーとベースコンストラクタで初期化されないC++
- 25. VSCODEで括弧内の線の色を変更するにはどうすればよいですか?
- 26. 中括弧は空のコンストラクタに関係しますか?
- 27. フラグメント内に含まれるレイアウトのOnClickListenerを初期化するにはどうすればよいですか?
- 28. stylecop:角括弧内の中括弧
- 29. NetBeansに中括弧を入力するにはどうすればよいですか?
- 30. IKImageViewを初期化するにはどうすればよいですか?
あなたは、基本クラスでコンストラクタベース::ベース(P pを)を定義しました – HJuls2
? @ HJuls2 - 定義されていますが、 'Base()'はありませんが、t彼はエラーを示します。 'Base(p);はc'tor呼び出しではありません。これは、 'Base'型の' p'という名前のオブジェクトを定義し、デフォルトの構築を試みます。 – StoryTeller
Base(p)はコンストラクタ呼び出しです。 Base :: Base(P p); –