第二派生类中的c++初始化列表



我试图写一个相对较深的类层次结构和我的编译器一直抛出"没有匹配的函数调用[默认构造函数为低音类]"。场景如下:

Class A {
    A(int);//note, no default constructor
}
Class B : public A {
    B(int i, int j) : A(i), someMemberVariable(j) {}
    int someMemberVariable;
}
Class C : public B {
    C(int k, int l) : B(k, l) {}
}

,编译器在类C的构造函数行抛出错误,说"没有匹配的函数调用A::A()",并告诉我使用A::A(int)。

我知道我没有类a的默认构造函数,当我试图子类化子类时,编译器会感到困惑。然而,我不明白的是为什么。我使用了一个初始化列表来避免这种情况。如果我只使用2级深度的类,那么它工作得很好,但第三个类给了我错误。我哪里做错了?

正如人们所评论的那样,你只需要使构造函数公开,然后你的代码出现了一些格式问题:

class A 
{
  public:
    A(int a) : blah(a) {}; //note, no default constructor
    int blah;
};
class B : public A 
{
  public:
    B(int i, int j) : A(i), someMemberVariable(j) {}
    int someMemberVariable;
};
class C : public B 
{
  public:
    C(int k, int l) : B(k, l) {}
};
int main( void )
{
  C c(5,4);
  return 0;
}

相关内容

  • 没有找到相关文章

最新更新