倘若你是用vc6做编译器的话,那么代码的开头应该写成:
#include
不写成:
#include
using namespace std;
就是用上面的一行替代下面的两行。
因为vc6这个编译器不支持在iostream做头文件的时候运行友元函数。
友元函数的写法如下
class matrix
{
public:
matrix(const matrix& a);//这个必须写
matrix &operator=(const matrix& a);//也必须写
const matrix& operator+()const //单目加就是正号只能重载成,成员函数,不可以作友元
{ return *this; }
matrix& operator+=(const matrix&a)
{...........................//这里写真正的矩阵相加,运算
return *this;
}
friend matrix operator+(const matrix&a,const matrix&b)//双目加可以重载作友元函数。
{ return matrix(a)+=b;
};
//matrix operator+(const matrix&a) //双目加可以重载为成员函数,这个不可以和友元函数同 //时存在,否则会有 error C2593: 'operator +' is ambiguous 的错误。
//意思是operator +有歧义,有二义性。
//{ }
private:................
................
};
///////////////////////////////////////////////////
//'+' : modifiers not allowed on nonmember functions
是否同时使用了向量和矩阵两个参数,如果是
在矩阵matrix类,和向量vec类同时声明operator+为友元
friend matrix operator+(const matrix&a,const vec &b);
两个类外部定义operator+就可以了
matrix operator+(const matrix&a,const vec &b){
return matrix(b)+=a;
}
除非来自继承,否则友元函数,可以操纵类的任何私有或保护成员
'+' : modifiers not allowed on nonmember functions 友元函数不能直接使用类中的私有数据成员 必须用成员操作符
这样问题就解决了 ........