重载输出运算符<<以使用 STL 列表迭代器
Overload the output operator << to work with STL list iterator
我有一个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;
}
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在STL容器中使用模板类
- <<操作员在下面的行中工作
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 检查函数返回类型是否与STL容器类型值相同
- STL算法函数在多个一维容器上的使用
- 在STL - C++中按成绩对学生列表进行排序?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- λ可以适应STL吗?
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用map<>来自STL