c++ - 模板中重载的 ostream 运算符

标签 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 个符号作为对象的链接或指针。比如“0044FA80”。

出了什么问题?

最佳答案

那是因为您在 sparseArray2D<T>重载(而不是重新加载) ,但这不是matrX是:

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

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

你想要的是:

cout << *matrX;

关于c++ - 模板中重载的 ostream 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568426/

相关文章:

c++ - 如何找到字体的宽度?

multithreading - boost::线程和模板函数

javascript - 我如何修改我的 javascript 代码来提醒这个?

C++ 模板错误:没有用于调用 std::vector<int, std::allocator<int>> 的匹配函数

c++ - Emscripten: algorithm.h 文件未找到

c++ - 重新定义 < 运算符以在字符串的 STL 算法中使用

c++ - 在 gdb 中漂亮地打印 boost::mpl::string<...> 类型

c++ - 使用 c/c++ 宏禁用多行语句

c++ - 将Leap Motion Controller 与QT创建器一起使用

c++ - 使用 std::qualifier 修复奇怪的编译器错误