返回信息流已经声明了友元函数friend ostream &operator<<(ostream &,Circle &);
但是程序运行却报错
大牛们帮我看看哦~~~
#include<iostream>
using namespace std;
template<typename T>
T max_value(T x,T y,T Z)
{
T temp;
if(x>y)
temp=x;
else
temp=y;
if(z>temp)
temp=z;
return temp;
}
class Circle
{
public:
friend ostream &operator<<(ostream &,Circle &); circle (int a=0,int b=0,double c=0.0)
{
x=a;y=b;radius=c;
}
int operator>(Circle m2)
{
if(radius>m2.radius)
return 1;
else return 0;
}
private:
int x,y;
double radius;
};
ostream &operator<<(ostream &out, Circle &C1)
{
out<<"x="<<C1.x<<" y="<<C1.y;
out<<" radius="<<C1.radius;
return out;
}
void main()
{
Circle C1(2,3,5),C2(3,5,8),C3(3,2,6);
cout<<max_value(12,32,21)<<endl;
cout<<max_value('a','A','9')<<endl;
cout<<max_value(C1,C2,C3)<<endl;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #34235同步于 2009/12/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助friend函数的使用
tsunami
2009/12/25镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我怎么改了后还是没有通过哦~
#include<iostream>
using namespace std;
template<typename T>
T max_value(T x,T y,T z)
{
T temp;
if(x>y)
temp=x;
else
temp=y;
if(z>temp)
temp=z;
return temp;
}
class Circle
{
public:
friend ostream &operator<<(ostream &,Circle &);
Circle (int a=0,int b=0,double c=0.0)
{
x=a;y=b;radius=c;
}
int operator>(Circle m2)
{
if(radius>m2.radius)
return 1;
else return 0;
}
private:
int x,y;
double radius;
};
ostream &operator<<(ostream &out, Circle &C1)
{
out<<"x="<<C1.x<<" y="<<C1.y;
out<<" radius="<<C1.radius;
return out;
}
void main()
{
Circle C1(2,3,5),C2(3,5,8),C3(3,2,6);
cout<<max_value(12,32,21)<<endl;
cout<<max_value('a','A','9')<<endl;
cout<<max_value(C1,C2,C3)<<endl;
}
【 在 tsunami 的大作中提到: 】
: 我怎么改了后还是没有通过哦~
: #include<iostream>
: using namespace std;
: ...................
把类定义放到头文件里去~
//Circle.h
class Circle
{
public:
friend std::ostream &operator<<(std::ostream &,Circle &);
Circle (int a=0,int b=0,double c=0.0)
{
x=a;y=b;radius=c;
}
int operator>(Circle m2)
{
if(radius>m2.radius)
return 1;
else return 0;
}
private:
int x,y;
double radius;
};
//XXX.cpp
#include<iostream>
#include "Circle.h"
using namespace std;
template<typename T>
T max_value(T x,T y,T z)
{
T temp;
if(x>y)
temp=x;
else
temp=y;
if(z>temp)
temp=z;
return temp;
}
ostream &operator<<(ostream &out, Circle &C1)
{
out<<"x="<<C1.x<<" y="<<C1.y;
out<<" radius="<<C1.radius;
return out;
}
void main()
{
Circle C1(2,3,5),C2(3,5,8),C3(3,2,6);
cout<<max_value(12,32,21)<<endl;
cout<<max_value('a','A','9')<<endl;
cout<<max_value(C1,C2,C3)<<endl;
}
试过了,不可以啊~
C:\Program Files\Microsoft Visual Studio\MyProjects\templatetest\test.cpp(19) : error C2248: 'x' : cannot access private member declared in class 'Circle'
【 在 tsunami 的大作中提到: 】
: 试过了,不可以啊~
: C:\Program Files\Microsoft Visual Studio\MyProjects\templatetest\test.cpp(19) : error C2248: 'x' : cannot access private member declared in class 'Circle'
写成两个文件还不成么?
恩~~~vs2005~vc6我都试过了,可以的啊~
我这儿报的错是找不到匹配的操作符…… =。=
dev-c++ gcc 3.xxx来着
重载<<操作符里面,第二个参数加const
ostream &operator<<(ostream &out, const Circle &C1);
【 在 buptljl 的大作中提到: 】
: vc6的问题,参考http://blog.sina.com.cn/s/blog_510219d70100a8l9.html
re VC6的bug