클래스 개체를 매트릭스 형식으로 보려면 삽입 연산자를 오버로드해야합니다. 나는 코드를 작성했지만 잘못된 것이있다. 이것을 내 코드에 포함시키고 빌드하려고하면 컴파일러가 나에게 많은 오류를줍니다. 그 부분을 주석 처리했을 때 오류가 사라지고 프로그램이 올바르게 작동합니다.삽입 연산자 오버로딩의 문제점은 무엇입니까? (<< 연산자)
Storage2D<double> m(row, column);
cout << m;
그것은 그것은 클래스의 범위 밖에 기록, 클래스 Storage2D의 멤버 함수되지 않습니다 : 여기에
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
내가 도와 주시면 감사하겠습니다.
편집 : 나머지는 내 코드입니다. 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