我把Circle类放在Calculate类前面还是会报错是为什么
时间: 2023-11-29 17:05:27 浏览: 26
如果你把`Circle`类放在`Calculate`类的前面,还是会出现编译错误,可能是因为你在`Calculate`类的成员函数`circles_area_compare()`中使用了`Circle`类的引用参数,但是编译器在处理`Calculate`类时还没有看到`Circle`类的定义,导致编译器无法识别`Circle`类的引用参数。
为了解决这个问题,你可以采取以下两种方式:
1. 将`Calculate`类的成员函数`circles_area_compare()`的定义放到`Circle`类的定义后面,这样就可以保证在编译`Calculate`类的成员函数时已经看到了`Circle`类的定义,从而避免编译错误。
```c++
#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;
}
```
2. 在`Calculate`类中使用前置声明代替直接引用`Circle`类,这样编译器就可以知道`Circle`类的存在而不需要看到它的完整定义。
```c++
#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;
}
```
希望这些解释能够帮助你理解问题所在。