このコードをチェックしてください:
#include <vector>
class A
{
public:
A(int a, int b);
};
class C :public A
{
public:
C(int a, int b):A(a,b){}
static C instances;
};
C C::instances;
int main()
{
return 1;
}
コンパイルすると、次のようなエラーが発生します。
$ c ++ inheritance.cpp 継承.cpp:16:6:エラー:「C :: C()」の呼び出しに一致する関数がありません 継承.cpp:16:6:注:候補は次のとおりです。 継承.cpp:12:2:注:C :: C(int、int) 継承.cpp:12:2:注:候補者は2つの引数を期待し、0が提供されます 継承.cpp:8:7:注:C :: C(const C&) 継承.cpp:8:7:注:候補者は1つの引数を期待し、0が提供されます
Aから継承するにはCが必要であり、コンストラクターに引数を含めるにはAが必要です。最後に、インスタンスの静的変数を引数なしで宣言および定義する必要があります。それで、それに対する解決策はありますか?私はあなたの親切なコメントを大切にします。
注意すべきもう1つのポイント:静的変数がコンテナの場合、次のようになります。
static std::vectorインスタンス;
コードは問題なくコンパイルされます。なんで?
編集:
すべての回答に感謝しますが、変更C C::instances;
するC C::instances(0,0);
と別のエラーが発生します:$ c ++ inheritance.cpp /tmp/cctw6l67.o:関数C::C(int, int)':
inheritance.cpp:(.text._ZN1CC2Eii[_ZN1CC5Eii]+0x1b): undefined reference to
A :: A(int、int)'collect2:ldが1つの終了ステータスを返しました
なぜですか?そしてそれを修正する方法は?
ありがとう