Я пытаюсь получить код для компиляции (Этот код) но когда я закомментирую строку 25:
virtual void info()=0;
он не компилируется:
shape.cpp: In function ‘int main()’:
shape.cpp:345:11: error: ‘class shape’ has no member named ‘info’
svec[0]->info();
но сохранение строки 25 дает очень длинную ошибку о чисто виртуальной функции …
shape.cpp:77:15: error: cannot declare parameter ‘squ’ to be of abstract type ‘square’
cube(square squ):
^
shape.cpp:30:7: note: because the following virtual functions are pure within ‘square’:
class square : public shape {
^
shape.cpp:25:16: note: virtual void shape::info()
virtual void info()=0;
^
shape.cpp:167:20: error: cannot declare parameter ‘rec’ to be of abstract type ‘rectangle’
cuboid(rectangle rec, double d):
^
shape.cpp:110:7: note: because the following virtual functions are pure within ‘rectangle’:
class rectangle : public shape {
^
shape.cpp:25:16: note: virtual void shape::info()
virtual void info()=0;
и так далее…
Кто-нибудь может дать мне представление о том, что я делаю неправильно? Благодарю.
Функция объявлена const
в производных классах, но не в базовом классе. Это означает, что производные классы не переопределяют функцию; они просто объявляют другую функцию с тем же именем.
Либо добавить const
в базовом классе или удалите его в производных классах.
Других решений пока нет …