关于重载提取运算符'<<'在VC6.0环境下产生二义性(ambiguous)的解决办法

今天编写了下列代码(仅仅显示关键代码片段),在VS2015上运行正常,但是在VC6.0下出现错误提示。

#include<iostream>
using namespace std;
class vct
{
private:
	double x, y;
public:
	//vct(double X = 0, double Y = 0) { x = X, y = Y; }
	//~vct() {}
	//void set(double X = 0, double Y = 0) { x = X, y = Y; }
	//vct operator+(vct& rival);
	//vct operator-(vct& rival);
	friend ostream& operator<<(ostream& out, const vct& rival);
};
ostream& operator<<(ostream& out, const vct& rival)
{
	out << "The Vector is (" << rival.x << ',' << rival.y << ")" << endl;return out;
}

此处重载了用于输出流对象cout的提取运算符'<<',但是在VC6.0下提示:

error C2593: 'operator <<' is ambiguous

并且出现了无法访问私有成员变量的问题,尽管已经定义了友元函数:

error C2248: 'x' : cannot access private member declared in class 'vct'

error C2248: 'y' : cannot access private member declared in class 'vct'

解决办法是,在类定义之前首先声明类,并且将友元函数的函数头放置在前面,因为友元函数不是成员函数,这么做是合理的:

#include<iostream>
using namespace std;
class vct;		//此处声明类
ostream& operator<<(ostream& out,const vct& rival);		//此处声明函数头
class vct
{
private:
	double x,y;
public:
	//vct(double X = 0, double Y = 0) { x = X, y = Y; }
	//~vct() {}
	//void set(double X = 0, double Y = 0) { x = X, y = Y; }
	//vct operator+(vct& rival);
	//vct operator-(vct& rival);
	friend ostream& operator<<(ostream& out,const vct& rival);//再次声明
};
ostream& operator<<(ostream& out,const vct& rival)	//友元重载函数定义
{
	out<<"The Vector is ("<<rival.x<<','<<rival.y<<")"<<endl;
	return out;
}




  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值