почему я получаю следующие ошибки: В конструкторе 'B :: B (int, int)': нет соответствующей функции для вызова 'A :: A ()' - PullRequest
2 голосов
/ 30 мая 2019

Я получаю ошибки и не знаю, что не так

Я пытался опустить конструкторов.

Я получаю следующие ошибки:

В конструкторе 'B :: B (int, int)': нет соответствующей функции для вызова 'A :: A ()'

Примечание кандидатов:

A :: A (const A &)

A :: A (int, int)

#include <iostream> 
using namespace std;

class A{
  public:
         int a;
         int b;
         A(int a1, int b1){
               a=a1; b = b1;
               }
  };

class B : public A {
  public:
         int c;
         int d;
         int e;
         B(int c1=10, int d1=20){
               c=c1; d=d1;
               e = a * b;
               }          
  void show(){
       cout <<"a = "<<a<<endl;
       cout <<"b = "<<b<<endl;
       cout <<"c = "<<c<<endl;
       cout <<"d = "<<d<<endl;
       cout <<"e = "<<e<<endl;
       }
  };

int main() {
  A a(2,2);
  B b;
  b.show();
  return 0;
}

1 Ответ

5 голосов
/ 30 мая 2019

B наследуется от A, поэтому необходимо создать A, но у вас нет конструктора по умолчанию для A, и при этом вы не вызываете конструктор явно для A из B. список инициализации.

Что-то вроде этого - то, что вам нужно:

B(int c1=10, int d1=20) : A(c1, d1) {
               c=c1; d=d1;
               e = a * b;
               }   

Или сделать A конструктивным по умолчанию.

Кроме того, вы должны использовать список инициализации для c, d и e, а не присваивать в теле вашего конструктора (хотя оптимизатор позаботится об этом в этом ситуация, лучше сделать все правильно)

B(int c1=10, int d1=20) : A(c1, d1), c(c1), d(d1), e(a*b) {}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...