我有一个Point2D类
Point2D
class Point2D
{
public:
int getX() const;
int getY() const;
void setX(int);
void setY(int);
protected:
int x;
int y;
};
我正试图使输出运算符<lt;要使用Point2D迭代器p2d_list.begin(),但我不确定如何做到这一点,这是我的尝试
ostream& operator<< (ostream& afile, Point2D* p2)
{
afile<<left
<<setw(1)
<<"["
<<left
<<setw(5)
<<p2->getX()
<<" ,"
<<left
<<setw(5)
<<p2->getY()
<<" ] "
<<left
<<setw(6)
<<p2->getScalarValue()
<<endl;
return afile;
}
在我的主要功能
int main()
{
list<Point2D> p2d_list;
list<Point2D>::iterator p2 = p2d_list.begin();
while ( p2 != p2d_list.end() )
{
cout<<p2; //error here
p2++;
}
}
我收到以下错误
错误C2679:二进制'<lt;':找不到接受类型为"std::_List_iterator<_Mylist>'(或者没有可接受的转换)
如何重载输出运算符<lt;以便它与Point2D迭代器**p2d_list.begin()
您正在尝试输出iterator
,而不是Point2D
。您应该先取消引用迭代器。在你的情况下,它应该是
cout << &(*p2);
,但我不知道为什么您的operator <<
接收指针,而不是ref/cont-ref。应该是
ostream& operator<< (ostream& afile, const Point2D& p2)
然后输出应该是
cout << *p2;
您需要为list<Point2D>::iterator
类型而不是Point2D*
重载运算符
ostream& operator<< (ostream& afile, list<Point2D>::iterator &p2)
{
afile<<left
<<setw(1)
<<"["
<<left
<<setw(5)
<<(*p2)->getX()
<<" ,"
<<left
<<setw(5)
<<(*p2)->getY()
<<" ] "
<<left
<<setw(6)
<<(*p2)->getScalarValue()
<<endl;
return afile;
}