#include <iostream> using namespace std; const double PI = 3.14159; class Circle; class Calculate { public: int circles_area_compare(Circle& c1, Circle& c2); }; class Circle //圆类 { private: int x, y; //圆心坐标 double r; //圆的半径 public: Circle(int xx, int yy, double rr) { x = xx; y = yy; r = rr; }; void print() { cout << "圆心坐标: (" << x << ", " << y << "),半径:" << r << endl; } friend int Calculate::circles_area_compare(Circle& c1, Circle& c2); }; int Calculate::circles_area_compare(Circle& c1, Circle& c2) { double s1, s2; s1 = PI * c1.r * c1.r; s2 = PI * c2.r * c2.r; int result; if (s1 > s2) result = 1; else if (s1 == s2) result = 0; else result = -1; return result; } int main() { Circle c1(0, 0, 10), c2(20, 20, 5); cout << "圆:"; c1.print(); cout << "圆:"; c2.print(); //调用友元函数 Calculate cal; cout << "两个圆面积比较结果:" << cal.circles_area_compare(c1, c2) << endl; return 0; } 为什么把class Circle;删了会报错
时间: 2024-04-27 13:24:42 浏览: 83
将`class Circle`删除后会出现编译错误,因为在`Calculate`类中,它的成员函数`circles_area_compare()`的参数为`Circle&`类型,这是一个`Circle`类的引用类型,编译器需要知道`Circle`类的定义。如果没有声明`class Circle`,编译器就无法确定`Circle`类的定义,因此会报错。
而将`class Circle`声明放在前面,可以让编译器先知道`Circle`类的定义,从而不会出现编译错误。这也是为什么在使用类的成员函数前需要先声明类的原因。
所以,为了避免编译错误,我们需要把`class Circle`声明放在前面。
阅读全文