插入运算符重载有什么问题?(<<操作员)

What's wrong with insertion operator overloading? (<< operator)

本文关键字:lt 操作员 重载 运算符 什么 问题 插入      更新时间:2023-10-16

我必须重载插入运算符才能以矩阵格式查看我的类对象。我写了代码,但出了点问题。当我将其包含在我的代码中并尝试构建时,编译器给了我大量的错误;当我注释掉该部分时,错误消失了,程序正常工作。这是代码:

    template <class itemType> 
ostream & operator<< (ostream & os, const Storage2D<itemType> & rhs)
{
    node<itemType>* ptrRow = rhs.head;
    node<itemType>* ptrColumn = rhs.head;
    for(; ptrColumn->down != NULL; ptrColumn = ptrColumn->down)
    {
        ptrRow = ptrColumn;
        for(; ptrRow->right != NULL; ptrRow = ptrRow->right)
        {
            os << ptrRow->info << setw(10);
        }
        os << ptrRow->info << setw(10) << endl;
    }
    return os;
}

以下是我尝试从主函数使用重载的方式:

Storage2D<double> m(row, column); 
cout << m;

它不是类 Storage2D 的成员函数,它是在实现文件中的类 Storage2D 范围之外编写的。

如果你能帮我就好了,提前谢谢。

编辑:这是我的其余代码。Storage2D.h 文件:

template <class itemType>
struct node
{
    itemType info;
    node* right;
    node* down;
    node()
    {}
    node(itemType data, node* r = NULL, node* d = NULL)
    {
        info = data;
        right = r;
        down = d;
    }
};
template <class itemType>
class Storage2D
{
public:
    Storage2D(const int & , const int & );      //constructor
    //~Storage2D();                             //destructor
    //Storage2D(const Storage2D & );                //deep copy constructor
private:
    node<itemType>* head;
};
ostream& operator<< (ostream & os, const Storage2D & rhs);
#include "Storage2D.cpp"

head是私有的,因此操作员需要成为朋友才能访问该数据成员。它还需要声明为函数模板,因为 Storage2D 是一个类模板:

#include <iostream> // for std::ostream
template <class itemType>
class storage2D {
// as before
template <typename T> 
friend std::ostream& operator<< (std::ostream & os, const Storage2D<T> & rhs);
};
// declaration
template <typename T> 
std::ostream& operator<< (std::ostream & os, const Storage2D<T> & rhs);

请注意,我已经显式使用了std::ostream,因为ostreamstd命名空间中。