クラスオブジェクトを行列形式で表示するには、挿入演算子をオーバーロードする必要があります。私はコードを書いたが、何か間違っている。これを私のコードに組み込み、ビルドしようとすると、コンパイラは私に多大なエラーを与えます。その部分をコメントアウトすると、エラーはなくなり、プログラムは正しく動作します。ここでは、コードは次のようになります。ここでは挿入演算子のオーバーロードにはどのような問題がありますか? (<<演算子)
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"
エラーメッセージが表示されます。理想的には、問題を示す小さな(100行未満の)自己完結型のテストケースも表示します。あなたが示したコードは何が間違っているかを知るには不十分です。 – zwol
原則として、「私がXを行うとエラーが出る」という性質の問題を解決する方法を尋ねるときは、少なくともそのエラーの最初のコピーを質問に含めるべきです。 –
あなたはオペレーターを友人にする必要がありますが、確かめるためにはエラーが必要です。 – 111111