Вопрос:

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

c++ compiler-errors

24263 просмотра

3 ответа

66 Репутация автора

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

Автор: max Источник Размещён: 09.11.2009 05:23

Ответы (3)


6 плюса

185618 Репутация автора

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

45 плюса

298965 Репутация автора

не может создать экземпляр абстрактного класса

Исходя из этой ошибки, я предполагаю, что вы используете 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:35

1 плюс

370599 Репутация автора

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
Вопросы из категории :
32x32