【问题标题】:Overload the output operator << to work with STL list iterator重载输出运算符 << 以使用 STL 列表迭代器
【发布时间】:2013-11-19 09:03:51
【问题描述】:

我有一个 Point2D 类

Point2D

class Point2D
{
 public:

           int getX() const;
           int getY() const;

           void setX(int);
           void setY(int);

 protected:

             int x;
             int y;

};

我正在尝试重载输出运算符 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:二进制“”类型右侧操作数的运算符(或没有可接受的转换)

如何重载输出运算符

【问题讨论】:

    标签: c++ linked-list overloading operator-keyword


    【解决方案1】:

    您正在尝试输出iterator,而不是Point2D。您应该首先取消引用迭代器。 在你的情况下应该是

    cout << &(*p2);
    

    ,但我不知道为什么你的operator &lt;&lt; 接收指针,而不是 ref/const-ref。应该是

    ostream& operator<< (ostream& afile, const Point2D& p2)
    

    然后输出应该是

    cout << *p2;
    

    【讨论】:

    • 我必须对重载函数进行哪些更改?我应该如何计算??
    • @Computernerd 使用.,而不是-&gt; 当地址到对象的字段时。就是这样。
    • 它不起作用我得到同样的错误:错误 C2679: 二进制 '
    • 显示代码。您的operator &lt;&lt; 声明是否按照我的建议进行了更改?
    【解决方案2】:

    您需要为list&lt;Point2D&gt;::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;
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 1970-01-01
      • 2012-03-12
      • 2011-10-18
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多