Нет соответствующего конструктора для инициализации

Я просто должен привыкнуть к базовым конструкторам копирования.

Я предположил, что правильно разместил конструкторы копирования.

Но когда я пытаюсь скомпилировать, я получаю сообщение об ошибке «Нет подходящего конструктора для инициализации B»

Я немного смущен.

class A {
int valuea;

public:
A(const A&); // copy constructor
int getValuea() const { return valuea; }
void setValuea(int x) { valuea = x; }
};

class B : public A {
int valueb;
public:
B(int valueb);
B(const B&); // copy constructor
int getValueb() const { return valueb; }
void setValueb(int x) { valueb = x; }
};

int main () {
B b1;
b1.setValuea(5);
b1.setValueb(10);
B b2(b1);
cout << "b2.valuea="  << b2.getValuea() << "b2.valueb="  << b2.getValueb() << endl;

return 0;
}

2

Решение

Объявив B(int) а также B(const B &), вы отключили конструктор по умолчанию, который неявно помещается в класс для вас, когда у вас нет других конструкторов, потому что для всего, что знает компилятор, вы можете не захотеть конструктор по умолчанию, поэтому он не может делать предположения (посмотреть здесь).

Добавьте следующее к B, не забывая инициализировать базу и членов с ней:

B(){}

В C ++ 11 это работает хорошо:

B() = default;

Что позволит B иметь конструктор по умолчанию для использования при объявлении B b1;

То же самое относится и к A, тоже. У вас есть конструктор копирования, так что больше нет конструктора по умолчанию, неявно размещенного для вас.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector