回 帖 发 新 帖 刷新版面

主题:C++友元模板

运行下面的代码会有不知名的错误...请问怎么解决呢???
我想实现的是自定义模板类的输出操作符<<,谢谢.

#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个回复)

沙发

effect C++ 第三版 中文版 第224页~225页有个类似的代码 

肯定对你有用

板凳

还是不行啊...不知道是不是编译器的问题

3 楼

template<class T>
ostream& operator<<(ostream &os, const A<T>& a) ->>> 这里有问题,改为const T& a
{
    os<<a.i<<endl;
    return os;
};

4 楼

唉,不行啊
const A<T>& a 改为 const T& a
的话,那问题更大了...

5 楼

#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 楼

非常感谢bruceteen的回答,
可惜没有100分的选项,
不然就给你100分的了.
我知道我原来的程序错在哪里了,
operator<< <T> 我少了<T> 的泛型函数的类型...
再次非常感激!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册