Метод решения ошибки: «не может создать экземпляр абстрактного класса»
24263 просмотра
3 ответа
Я считаю, что одна из самых трудоемких для меня ошибок компилятора - «не может создать экземпляр абстрактного класса», поскольку проблема всегда заключается в том, что я не собирался, чтобы класс был абстрактным, а компилятор не перечисляет, какие функции являются абстрактными. Должен быть более разумный способ решения этих проблем, чем чтение заголовков 10 раз, пока я наконец не увижу пропущенное «const» где-то. Как вы решаете это?
Автор: max Источник Размещён: 13.11.2019 11:42Ответы (3)
45 плюса
не может создать экземпляр абстрактного класса
Исходя из этой ошибки, я предполагаю, что вы используете Visual Studio (поскольку именно это говорит Visual C ++, когда вы пытаетесь создать экземпляр абстрактного класса).
Посмотрите на окно вывода 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 в окне «Список ошибок» отображается только первая строка сообщения об ошибке.
Автор: James McNellis Размещён: 09.11.2009 05:356 плюса
C ++ сообщает вам, какие функции являются абстрактными и где они объявлены:
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
Поэтому, возможно, попробуйте скомпилировать свой код с C ++ или указать свой компилятор, чтобы другие могли дать полезные советы для вашего конкретного компилятора.
Автор: bdonlan Размещён: 09.11.2009 05:26
1 плюс
C ++ 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'
Автор: Remy Lebeau
Размещён: 30.05.2013 11:16
Вопросы из категории :
- c++ What are the barriers to understanding pointers and what can be done to overcome them?
- c++ Какой самый простой способ для анализа файла INI в C ++?
- c++ Когда вы должны использовать «друг» в C ++?
- c++ Как вы очищаете переменную stringstream?
- c++ В C ++ конструктор и деструктор могут быть встроенными функциями?
- c++ Что такое виртуальный базовый класс в C ++?
- c++ В чем разница между #include <filename> и #include "filename"?
- c++ Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- c++ Как преобразовать std :: string в LPCWSTR в C ++ (Unicode)
- c++ Regular cast vs. static_cast vs. dynamic_cast
- compiler-errors Определение манифеста обнаруженной сборки не соответствует ссылке на сборку
- compiler-errors «Неустранимая ошибка сборки» в любом проекте MSI Setup
- compiler-errors Устранить ошибки сборки из-за циклической зависимости между классами
- compiler-errors Как объединить несколько строк C ++ в одну строку?
- compiler-errors Доступен ли JSLint для автономного использования?
- compiler-errors R cannot be resolved - Android error
- compiler-errors Return specific type within Haskell
- compiler-errors Метод решения ошибки: «не может создать экземпляр абстрактного класса»
- compiler-errors Как скомпилировать исходный файл Java, который закодирован как "UTF-8"?
- compiler-errors Открытый оператор new, частный оператор delete: получение C2248 «не может получить доступ к частному члену» при использовании new