Как обрабатывать нестандартные конструкторы в случае двойного наследования - PullRequest
0 голосов
/ 29 сентября 2018

Я хотел бы унаследовать класс C от двух классов, A и B, один из которых (B) имеет нестандартный конструктор.Как должен выглядеть конструктор C, чтобы быть совместимым с любым из двух базовых классов?У меня есть небольшой пример, который демонстрирует мою проблему, и это выглядит так:

class A {
    public:
    A(){}
    ~A(){}
};

class B {
    public:
    B(int abc,
      int def,
      int ghj){}
      ~B(){}
};

class C:public B, public A {
    public:
    C(int test,
      int test2,
      int test3){}
    ~C(){}
};

int main(void) {
    C* ptr = new C (123,456,789);
}

Где я получаю следующую ошибку компилятора:

main.cpp: In constructor 'C::C(int, int, int)':
main.cpp:19:17: error: no matching function for call to 'B::B()'
       int test3){}

1 Ответ

0 голосов
/ 29 сентября 2018

Учитывая текущую реализацию конструктора C, базовый подобъект BA) будет инициализирован по умолчанию, но класс B не имеет конструктора по умолчанию, что вызывает ошибку.

Вы можете применить список инициализаторов элементов , чтобы инициализировать B базовый подобъект через соответствующий конструктор B.например,

class C:public B, public A {
    public:
    C(int test,
      int test2,
      int test3) : B(test, test2, test3) {}
//               ^^^^^^^^^^^^^^^^^^^^^^^
    ~C(){}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...