模板中重载的ostream运算符

时间:2015-04-10 18:32:08

标签: c++ templates std

我在重载ostream运算符时感到困惑<<为我的模板类。 (删除了不必要的代码)

sparseArray2D.h:

#include <iostream>
using namespace std;

template <typename T>
class sparseArray2D
{
private:
    //...
public:
    //...
    friend ostream& operator << (ostream&, const sparseArray2D<T>&);
    //...
}

template <typename T> 
ostream& operator << (ostream& os, const sparseArray2D<T> &_matrix)
{
//...
    os<<"Overloaded operator works";
    return os;
};

和主要:

#include "sparseArray2D.h"

int _tmain(int argc, _TCHAR* argv[])
{
    //...
    sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
    cout << matrX;
    //...
}

VS2012中没有错误也没有警告,但在控制台中我有8个符号作为对象的链接或指针。喜欢&#34; 0044FA80&#34;。

出了什么问题?

1 个答案:

答案 0 :(得分:2)

那是因为你sparseArray2D<T>上的超载(没有重新加载),但那不是matrX的原因:

sparseArray2D<int> *matrX = new sparseArray2D<int>(10, 9, 5);
//                ^^
cout << matrX;

matrX是一个指针。因此,您只是流式传输指针 - 默认情况下会记录其地址...显然是0x0044FA80。

你想要的是:

cout << *matrX;