Метод решения ошибки: "невозможно создать экземпляр абстрактного класса"

Я считаю, что одна из самых трудоемких ошибок компилятора для меня - "не может создать экземпляр абстрактного класса", поскольку проблема всегда заключается в том, что я не хотел, чтобы класс был абстрактным, а компилятор не перечисляет, какие функции являются абстрактными. Там должен быть более разумный способ решить их, чем читать заголовки 10 раз, пока я наконец не увижу отсутствующего "const" где-то. Как вы их решаете?

Ответы

Ответ 1

не может создавать абстрактный класс

Основываясь на этой ошибке, я предполагаю, что вы используете Visual Studio (с тех пор, как Visual С++ говорит, когда вы пытаетесь создать экземпляр абстрактного класса).

Посмотрите окно вывода Visual Studio (View = > Output); вывод должен содержать инструкцию после сообщения об ошибке:

stubby.cpp(10) : error C2259: 'bar' : cannot instantiate abstract class
due to following members:
'void foo::x(void) const' : is abstract
stubby.cpp(2) : see declaration of 'foo::x'

(Это ошибка, приведенная для примера кода bdonlan)

В Visual Studio в окне "Список ошибок" отображается только первая строка сообщения об ошибке.

Ответ 2

С++ сообщает вам, какие именно функции являются абстрактными, и где они объявлены:

class foo {
        virtual void x() const = 0;
};

class bar : public foo {
        virtual void x() { }
};

void test() {
        new bar;
}

test.cpp: In function ‘void test()’:
test.cpp:10: error: cannot allocate an object of abstract type ‘bar’
test.cpp:5: note:   because the following virtual functions are pure within ‘bar’:
test.cpp:2: note:       virtual void foo::x() const

Поэтому, возможно, попробуйте выполнить компиляцию кода с С++ или укажите свой компилятор, чтобы другие могли дать полезные предложения для вашего конкретного компилятора.


Ответ 3

С++ Builder сообщает вам, какой метод является абстрактным:

class foo {
    virtual void x() const = 0;
};

class bar : public foo {
    virtual void x() { }
};

new bar;

[BCC32 Error] File55.cpp(20): E2352 Cannot create instance of abstract class 'bar'
[BCC32 Error] File55.cpp(20): E2353 Class 'bar' is abstract because of 'foo::x() const = 0'