gpt4 book ai didi

c++ - 插入运算符重载有什么问题? (<< 运算符)

转载 作者:行者123 更新时间:2023-11-30 04:28:11 24 4
gpt4 key购买 nike

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

    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;
}

下面是我尝试使用 main 函数重载的方法:

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 是私有(private)的,因此运算符(operator)需要成为 friend 才能访问该数据成员。它还需要声明为函数模板,因为 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,因为 ostream 位于 std 命名空间中。

关于c++ - 插入运算符重载有什么问题? (<< 运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com