有谁知道如何让这两个重载运算符共存?
#include<iostream>
template< typename T >
class A;
template< typename T >
std::ostream& operator<<( std::ostream& o, const A<T>& e );
template< typename T >
class A
{
A& operator <<( const A& e );
friend std::ostream& operator<< <>( std::ostream& o, const A<T>& e );
};
int main()
{
// program
return 0;
}
// def A<T>::A& A::operator <<( const A& e );
// def std::ostream& operator<< <>( std::ostream& o, const A<T>& e );
错误:
$ g++ prov.cpp -o prov
prov.cpp:13:33: error: declaration of ‘operator<<’ as non-function
prov.cpp:13:33: error: expected ‘;’ at end of member declaration
prov.cpp:13:36: error: expected unqualified-id before ‘<’ token
我很抱歉我的英语不好。因此我写的很少。
致以诚挚的谢意!
答案 0 :(得分:0)
我想你想要:
friend std::ostream& operator<< <T>( ... );
在朋友声明中。 (我不确定:我的政策一直都是
一直在定义朋友inline
,所以无论如何
是模板与否。但这看起来像标准中的例子。)
答案 1 :(得分:0)
我找到了一个解决方法:
template< typename T >
class A
{
A& operator <<( const A& e );
template< typename T1 >
friend std::ostream& operator<< ( std::ostream& o, const A<T1>& e );
};
这里需要重命名typename T
,否则您将在A类范围内重新声明模板参数,编译器会抱怨。