主题:C++友元模板
josephkwok
[专家分:530] 发布于 2010-10-23 19:03:00
运行下面的代码会有不知名的错误...请问怎么解决呢???
我想实现的是自定义模板类的输出操作符<<,谢谢.
#include <iostream>
using namespace std;
template<class T>
class A
{
friend ostream& operator<<(ostream &os, const A<T>& a);
public:
A(){ i=3;}
int i;
};
template<class T>
ostream& operator<<(ostream &os, const A<T>& a)
{
os<<a.i<<endl;
return os;
};
int main()
{
A<int> a;
cout<<a;
return 0;
}
回复列表 (共6个回复)
沙发
zhaoyg [专家分:4790] 发布于 2010-10-24 11:37:00
effect C++ 第三版 中文版 第224页~225页有个类似的代码
肯定对你有用
板凳
josephkwok [专家分:530] 发布于 2010-10-24 16:25:00
还是不行啊...不知道是不是编译器的问题
3 楼
zhaoyg [专家分:4790] 发布于 2010-10-24 17:00:00
template<class T>
ostream& operator<<(ostream &os, const A<T>& a) ->>> 这里有问题,改为const T& a
{
os<<a.i<<endl;
return os;
};
4 楼
josephkwok [专家分:530] 发布于 2010-10-24 23:20:00
唉,不行啊
const A<T>& a 改为 const T& a
的话,那问题更大了...
5 楼
bruceteen [专家分:42660] 发布于 2010-10-25 08:35:00
#include <iostream>
using namespace std;
template<class T> class A;
template<class T> ostream& operator<<( ostream &os, const A<T>& a );
template<class T>
class A
{
friend ostream& operator<< <T>(ostream &os, const A<T>& a);
public:
A() : i(3) {}
int i;
};
template<class T>
ostream& operator<<( ostream &os, const A<T>& a )
{
os << a.i;
return os;
};
int main()
{
A<int> a;
cout << a << endl;
return 0;
}
6 楼
josephkwok [专家分:530] 发布于 2010-10-25 09:27:00
非常感谢bruceteen的回答,
可惜没有100分的选项,
不然就给你100分的了.
我知道我原来的程序错在哪里了,
operator<< <T> 我少了<T> 的泛型函数的类型...
再次非常感激!!!
我来回复