[解決済み】コンストラクタの継承
2022-04-01 18:30:58
質問
なぜこのようなコードになるのでしょうか。
class A
{
public:
explicit A(int x) {}
};
class B: public A
{
};
int main(void)
{
B *b = new B(5);
delete b;
}
結果、これらのエラーが発生します。
main.cpp: 関数 'int main()'内。 main.cpp:13: error: no matching function for call to 'B::B(int)' main.cpp:8: note: 候補は以下の通りです。B::B() main.cpp:8: 注意: B::B(const B&)
B は A のコンストラクタを継承してはいけないのでしょうか?
(これはgccを使用しています)
解決方法は?
C++11標準に対応したコンパイラを使用している場合、コンストラクタの継承に
using
(ダジャレ)。詳しくは
ウィキペディアC++11の記事
. と書いていますね。
class A
{
public:
explicit A(int x) {}
};
class B: public A
{
using A::A;
};
これはall or nothingで、一部のコンストラクタだけを継承することはできず、これを書けばすべてのコンストラクタを継承することになります。選択したものだけを継承するには、個々のコンストラクタを手作業で記述し、そこから必要に応じてベースコンストラクタを呼び出す必要があります。
C++03規格では、歴史的にコンストラクタを継承することができませんでした。自分でベース実装を呼び出して、ひとつひとつ手作業で継承する必要があったのです。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み】Pythonで複数のコンストラクタを持つためのクリーンでPythonicな方法は何ですか?
-
[解決済み】派生クラスでオーバーライドされた関数が、ベースクラスの他のオーバーロードを隠してしまうのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー