我试图获取一些代码进行编译(This code),但是当我注释掉第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
,或在派生类中将其删除。
关于c++ - “类形状”没有名为“信息”的成员,但添加成员也不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22712447/