2017-10-07 50 views
0

私の質問に特に関連する回答は見つかりませんでした。私が見たことでは、「奇妙な」ケースが少しあります。エラー:タイプ 'class'が 'class'の直接ベースではありません

私はクラスChild2を継承し、それはChild1から継承し、順にParentを継承しています。 Parentにはコンストラクタがありません。ここで

は私が継承する方法です:

Child1.h:

class Child1 : virtual public Parent 

これは私がChild2のコンストラクタから呼び出したい関数です。

void Child1::foo(unsigned int i) 
{ 
    // ... 
} 

子2

Child2::Child2() : Child1() 
{ 
    foo(10); 
} 

foo()という機能はChild2にありません。正しく理解しても曖昧さはありません。

しかし、私はこのエラーが発生した:

Child2.cpp: In constructor ‘Child2::Child2()’: Child2.cpp:12:28: error: type ‘Child1’ is not a direct base of ‘Child2’ Child2::Child2() : Child1()

Child1のコンストラクタが働いているので、私はそれを残してきました。この場合重要であるかどうかはわかりません。

+2

この場合、重要である可能性があります。あなたは[mcve]を提供する必要があります。結局のところ、あなたが問題が何であるか分からないなら、あなたが残したものは、他の人があなたを助けることができるものではないことをどのように知っていますか? – Peter

+0

'foo'関数の宣言を共有してください。 – MKR

答えて

0

Child2クラスがChild1の子として宣言されているかどうかを確認します。次のようなものがあります。

class Child2 : Child1 
{....} 
関連する問題