类友元函数模板

dalookzhu 2010-06-19 09:02:13
template < class C >
class Complex{

friend ostream& operator << <C>( ostream& output, const Complex< C > &a );
private:
C real;
C imag;
};

template < class C >
ostream& operator << ( ostream& output, const Complex< C > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}


请问出什么问题了。
template < class C >
class Complex{

friend ostream& operator << <C>( ostream& output, const Complex< C > &a );
private:
C real;
C imag;
};

template < class C >
ostream& operator << <C>( ostream& output, const Complex< C > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}

我改成这样也错
...全文
194 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dalookzhu 2010-06-19
  • 打赏
  • 举报
回复
。。。。。有朋友帮我解决了。。。。。。
是output << "real = " << a.real <<"\timag = " a.imag << endl;
这句错了。。。。。
oyster2008 2010-06-19
  • 打赏
  • 举报
回复
什么意思,针对哪个特例
[Quote=引用 4 楼 dalookzhu 的回复:]

引用 2 楼 oyster2008 的回复:
template < class C >
class Complex{
template <class U>
friend ostream&amp; operator <<( ostream&amp; output, const Complex< U > &amp;a );
private:
C real;
C ……
[/Quote]
pengzhixi 2010-06-19
  • 打赏
  • 举报
回复

template < class C >
class Complex{

friend ostream& operator << ( ostream& output, const Complex< C > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}

private:
C real;
C imag;
};


我就还不信了 3种写法你的编译器都不支持。
耍宝王 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dalookzhu 的回复:]

是不是模板也一定要声明?
[/Quote]
什么意思啊?

漏看一处
output << "real = " << a.real <<"\timag = " a.imag << endl;
改成
output << "real = " << a.real <<"\timag = " << a.imag << endl;
pengzhixi 2010-06-19
  • 打赏
  • 举报
回复

template < class C >
class Complex{

template<class T> friend ostream& operator << ( ostream& output, const Complex< T > &a );
private:
C real;
C imag;
};

template < class T>
ostream& operator << ( ostream& output, const Complex< T > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}
dalookzhu 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]
C/C++ code

template < class C >
class Complex;
template < class C >
ostream& operator << ( ostream& output, const Complex< C > &a );
template < class C >
class Complex{

frie……
[/Quote]

error C2146: 语法错误 : 缺少“;”(在标识符“a”的前面)
1> .\2.cpp(39): 参见对正在编译的函数 模板 实例化“std::ostream &operator <<<C>(std::ostream &,const Complex<C> &)”的引用
1> with
1> [
1> C=int
1> ]
1>.\2.cpp(22) : error C2563: 在形参表中不匹配
1>.\2.cpp(22) : error C2568: “<<”: 无法解析函数重载
1> D:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(974): 可能是“std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)”
1> with
1> [
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>
1> ]
1> D:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(966): 或 “std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> D:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(940): 或 “std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)”
报错
pengzhixi 2010-06-19
  • 打赏
  • 举报
回复

template < class C >
class Complex;
template < class C >
ostream& operator << ( ostream& output, const Complex< C > &a );
template < class C >
class Complex{

friend ostream& operator << <C>( ostream& output, const Complex< C > &a );
private:
C real;
C imag;
};

template < class C >
ostream& operator << ( ostream& output, const Complex< C > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}


这样用
dalookzhu 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pgplay 的回复:]
需要先声明这个模板友元函数

C/C++ code
template < class C > class Complex;
template < class C > ostream& operator <<( ostream& output, const Complex< C > &a );//声明

template < class C >
class Co……
[/Quote]
是不是模板也一定要声明?
耍宝王 2010-06-19
  • 打赏
  • 举报
回复
需要先声明这个模板友元函数
template < class C > class Complex;
template < class C > ostream& operator <<( ostream& output, const Complex< C > &a );//声明

template < class C >
class Complex{

friend ostream& operator << <C>( ostream& output, const Complex< C > &a );
private:
C real;
C imag;
};

template < class C >
ostream& operator << ( ostream& output, const Complex< C > &a ){
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}


P.S 同时,请确认你用的不是VC6.0这类,对模板支持不佳的编译器
dalookzhu 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyster2008 的回复:]
template < class C >
class Complex{
template <class U>
friend ostream& operator <<( ostream& output, const Complex< U > &a );
private:
C real;
C imag;
};
template < class C >
……
[/Quote]

我只想授予特定实例的友元函数
BuleRiver 2010-06-19
  • 打赏
  • 举报
回复

friend ostream& operator <<(ostream& output, const Complex< C > &a);
oyster2008 2010-06-19
  • 打赏
  • 举报
回复
template < class C >
class Complex{
template <class U>
friend ostream& operator <<( ostream& output, const Complex< U > &a );
private:
C real;
C imag;
};
template < class C >
ostream& operator <<( ostream& output, const Complex< C > &a )
{
output << "real = " << a.real <<"\timag = " a.imag << endl;
return output;
}

oyster2008 2010-06-19
  • 打赏
  • 举报
回复

template < class C > class Complex{
template <class U>
friend ostream& operator <<( ostream& output, const Complex< U > &a ); private: C real; C imag; }; template < class C > ostream& operator <<( ostream& output, const Complex< C > &a ){ output << "real = " << a.real <<"\timag = " a.imag << endl; return output; }

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧