我的任务是练习继承,把所有的类放在单独的文件中。我有一个基类Circle
和一个派生类Cylinder
。
我所坚持的是试图在屏幕上显示我对Cylinder
类型的对象B
计算的面积和体积的结果。我找到了一种方法来为Circle
做这件事,尽管它对我的Cylinder
不起作用。
circle.cpp
#include "circle.h"
#include <cmath>
using namespace std;
Circle Circle::area() {
return M_PI * pow(r, 2);
}
void Circle::getArea() {
cout << "Area = " << r << " m^2";
}
cylinder.cpp
#include "cylinder.h"
#include <cmath>
using namespace std;
double Cylinder::area() {
return 2 * M_PI * r * h;
}
void Cylinder::getArea() {
cout << "Area = " << h;
}
main.cpp
#include <iostream>
#include "circle.h"
#include "cylinder.h"
using namespace std;
int main() {
Circle A;
A.view();
Circle A1(8);
A1.view();
Cylinder B;
B.view();
Cylinder B1(4, 6);
B1.view();
//A.area().getArea();
//cout << endl;
//A.circumference().getCircum();
//cout << endl;
//A1.area().getArea();
//cout << endl;
//A1.circumference().getCircum();
B.area().getArea();
return 0;
}
我得到的错误:
main.cpp: In function ‘int main()’:
main.cpp:26:14: error: request for member ‘getArea’ in ‘B.Cylinder::area()’, which is of non-class type ‘double’
26 | B.area().getArea();
| ^~~~~~~
我觉得我在main()
中的代码(例如B
)以及类Cylinder
中的方法getArea()
和getVolume()
都不正确。对于Circle
类型的对象A
和A1
,可能有更好的方法来做同样的事情,尽管我注解掉的代码实际上是有效的。
如果你能给我点建议我会很感激的。
2条答案
按热度按时间aurhwmvo1#
那么,您收到错误消息的原因是:
是因为你基本上是这样做的:
所以在这里,
_
推断为double
,然后你这样做:您正在尝试从
double
访问成员函数,而double
没有任何成员函数。你可能想这样做:
这将
B.area()
的面积分配给变量x
,并将x
分配给B.h
。然后调用B
的成员函数并输出该区域。dsekswqp2#
在
getArea()
函数中,不是说:就说:
然后在
main.cpp
中调用B.getArea()
。希望这有帮助!