二进制“<<”: 没有找到接受“const complex” 类型的右操作数的运算符(或没有可接受的转换)
重载符号《为友元函数,代码如下,编译时提示“二进制“<<”: 没有找到接受“const complex<T>” 类型的右操作数的运算符(或没有可接受的转换)”,请高手帮助分析原因,觉得声明和实现没什么问题!!
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>
class complex
{
private:
double _r;
double _i;
public:
complex(double,double);
const complex<T> operator+(const complex<T>& a);
const complex<T> operator-(const complex<T>& a);
const complex<T> operator*(const complex<T>& a);
const complex<T> operator/(const complex<T>& a);
void get_r() const
{
cout<<_r<<endl;
}
// T& operator[](int index);
// const T& operator[](int index) const;
// template<class T>
friend iostream& operator<<<T>(iostream& out,const complex<T>& a);
// {
// out<<"("<<a._i<<","<<a._r<<")"<<endl;
// return out;
// }
};
template<class T>
complex<T>::complex(double a,double b)
{
_r=a;
_i=b;
}
template<class T>
const complex<T> complex<T>::operator +(const complex<T> &a)
{
return complex<T>(this->_i+a._i,this->_r+a._r);
}
template<class T>
const complex<T> complex<T>::operator -(const complex<T> &a)
{
return complex<T>(this->_i-a._i,this->_r-a._r);
}
template<class T>
const complex<T> complex<T>::operator *(const complex<T> &a)
{
return complex<T>(this->_i*a._i,this->_r*a._r);
}
template<class T>
const complex<T> complex<T>::operator /(const complex<T> &a)
{
if(a._i!=0 &&a._r!=0 )
return complex<T>(this->_i/a._i,this->_r/a._r);
exit(-1);
}
template<class T>
iostream& operator<<(iostream& out,const complex<T>& a)
{
out<<"("<<a._i<<","<<a._r<<")"<<endl;
return out;
}
int _tmain(int argc, _TCHAR* argv[])
{
complex<double> a1(2.3,4.6);
complex<double> a2(6.7,9.7);
cout<<(a1+a2)<<endl;
return 0;
}