#include<iostream> #include<cmath> using namespace std; class test { public: test(int a,int b) //构造函数。 { x=a; y=b; } private: int x,y; //私有的数据成员。 friend double distance(test& m,test& n); //在类的末尾声明一个友元函数。 } ; //类定义完别忘了加上";" double distance(test& m,test& n) //友元函数定义,将参数定义为test类型的引用方便访问与使用test类的私有成员。 { double x=m.x>n.x? m.x-n.x : n.x-m.x; //这是一个运算符,意思就是如果m.x>n.x那么取m.x-n.x的值,假若m.x<n.x则取n.x-m.x的值。 double y=m.y>n.y? m.y-n.y : n.y-m.y; //这里定义的double型的x,y与类中定义的x,y不一样,这里的只是相当于普通函数内定义的局部变量,当函数调用完成后编译器自动撤销它们的内存空间。 //之所以将这两个局部变量命名为x,y是由于大家习惯坐标用x,y来表示。 return sqrt(x*x+y*y); //这里计算用的x,y就是这个函数内定义的局部变量x,y,与类中的x,y无关。注意分辨清楚。 } int main() { test z1(1,1); //创建一个test类的对象z1,会调用构造函数对z1.x,z1.y进行初始化。 test z2(4,8); cout<<distance(z1,z2)<<endl; return 0; }用dev c++5.11无法编译通过
时间: 2023-11-22 08:56:06 浏览: 152
#include <iostream> #include<iomanip> using namespace std;九九乘法表
这段代码的问题可能是缺少了一个分号。在类定义中,最后一个成员函数的后面应该加上分号,像这样:
```
class test {
public:
test(int a, int b) {
x = a;
y = b;
}
private:
int x, y;
friend double distance(test& m, test& n);
}; // 这里需要加上分号
double distance(test& m, test& n) {
double x = m.x > n.x ? m.x - n.x : n.x - m.x;
double y = m.y > n.y ? m.y - n.y : n.y - m.y;
return sqrt(x*x + y*y);
}
int main() {
test z1(1, 1);
test z2(4, 8);
cout << distance(z1, z2) << endl;
return 0;
}
```
如果还有其他问题,请详细说明错误和编译器给出的具体错误信息。
阅读全文