Метод решения ошибки: "невозможно создать экземпляр абстрактного класса"
Я считаю, что одна из самых трудоемких ошибок компилятора для меня - "не может создать экземпляр абстрактного класса", поскольку проблема всегда заключается в том, что я не хотел, чтобы класс был абстрактным, а компилятор не перечисляет, какие функции являются абстрактными. Там должен быть более разумный способ решить их, чем читать заголовки 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'