вызов конструктора копирования абстрактного класса c ++ делает ошибку - PullRequest
0 голосов
/ 30 апреля 2018

Мой вопрос очень похож на другой, но немного другой. У меня есть пример кода:

class B1 {
private :
    int * ptr;
public:
    B1() : a{ 1 } { ptr = new int{ 2 }; }
    B1(const B1& other) : a{ other.a } { ptr = new int{ *other.ptr }; }
    ~B1() { delete ptr; }
    int a;
    virtual void smthing() = 0;
};
class D : B1 {
public:
    D(int i) : B1{} {}
    D(const D& a) : B1{ a } {}
    void smthing() { return; };
};
int main() {
    D d { 3 };
    D dd { d };
    return 0;
}

Я использую vs2015, и этот код работает, но выдает ошибку: объект абстрактного класса типа "B1" не разрешен ... Если я удаляю эту строку D(const D& a) : B1{ a } {}, вызывается конструктор копирования базового класса, и нет никаких проблем, но если мне нужен конструктор копирования производного класса, как я могу заставить эту работу работать без ошибок?

Спасибо за ответ!

...