为什么需要运算符重载?

用户23

需要建议。下面的代码,我只是想找出存储在Line2D类中的x和y值。但是我得到这个错误。

Assn3.cpp:166:34: error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char>]((* & std::cout), ((const char*)"Pt1: ")) << l2d.Line2D::getPt1()’

我需要运算符重载吗?如果是,为什么?我对其他课程也尝试过,没有错误。

这是我的代码:

vector<Line2D> l2dvector;
Line2D l2d;

void readData()
{
    cout<< "Please enter filename : ";
    cin >> inputFile;

    fstream fileStream;
        fileStream.open(inputFile.c_str(),fstream::in);
        int records = 0;

    while( fileStream.good() ) 
    {
        string line = "";
        while (getline (fileStream, line))  
        {   
            stringstream ss (line);
            getline (ss, className, ',');

                 if (className == "Line2D")
            {   
                int x1, x2, y1, y2;
                getline (ss, l2dX1, '[');
                getline (ss, l2dX1, ',');

                getline (ss, l2dY1, ' ');
                getline (ss, l2dY1, ']');

                getline (ss, l2dX2, ' ');
                getline (ss, l2dX2, '[');
                getline (ss, l2dX2, ',');

                getline (ss, l2dY2, ' ');
                getline (ss, l2dY2, ']');

                istringstream (l2dX1) >> x1;
                istringstream (l2dX2) >> x2;
                istringstream (l2dY1) >> y1;
                istringstream (l2dY2) >> y2;

                Point2D pt1 (x1,y1);
                Point2D pt2 (x2,y2);

                Line2D l2d (pt1, pt2);
                l2dvector.push_back(l2d);
                l2d.setPt1(pt1);
                l2d.setPt2(pt2);

            //cout << "class name: " << className << endl;          
            cout << "Pt1: " << l2d.getPt1() << endl;
            cout << "Pt2: " << l2d.getPt2() << endl;
            }
                }

    records++;
    }

    cout << records << "records read in successfully!" << endl;
    cout << "Going back to main menu .. " << endl;

}




Line2D.cpp

Line2D::Line2D ()
{

}

Line2D::Line2D (Point2D pt1, Point2D pt2)
{
    this->pt1 = pt1;
    this->pt2 = pt2;
}


double Line2D::setLength()
{
    length = sqrt(pow((pt1.getX()-pt2.getX()),2)) + pow ((pt1.getY()-pt2.getY()),2);
    return length;
}


//Accessors

Point2D Line2D::getPt1()
{
    return pt1;
}


Point2D Line2D::getPt2()
{
    return pt2;
}

double Line2D::getScalarValue() //returns the value of attribute length
{
    return length;
}


//Mutators

void Line2D::setPt1 (Point2D pt1)
{
    this->pt1 = pt1;
}

void Line2D::setPt2 (Point2D pt2)
{
    this->pt2 = pt2;
}

编辑:

在Point2D.h中添加了运算符重载

ostream &operator<<( ostream &output, const Point2D &P)
              { 
             output << "X : " << P.x << " Y : " << P.y;
             return output;            
              }

错误编译:

In file included from Point2D.cpp:3:0:
Point2D.h:39:60: error: ‘std::ostream& Point2D::operator<<(std::ostream&, const Point2D&)’ must take exactly one argument
In file included from Point3D.h:9:0,
                 from Point3D.cpp:3:
Point2D.h:39:60: error: ‘std::ostream& Point2D::operator<<(std::ostream&, const Point2D&)’ must take exactly one argument
In file included from Line2D.h:9:0,
                 from Line2D.cpp:3:
Point2D.h:39:60: error: ‘std::ostream& Point2D::operator<<(std::ostream&, const Point2D&)’ must take exactly one argument
布赖恩·格拉丁

流运营商operator<<operator>>每当物体被分别输出到或从流输入时,被调用。因此,如果一个类未定义其中之一,则归因于它的功能将无法访问。

所以基本上,长话短说,你的Point2D类需要的operator<<如果要与一起使用cin,则还需要一个operator>>

是有关重载流运算符的教程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在运算符重载中需要引用?

来自分类Dev

为什么在重载>>和<<运算符时需要返回对istream / ostream的引用?

来自分类Dev

这是STL中的错误吗?为什么在此结构中需要运算符重载?

来自分类Dev

为什么我的重载乘法运算符无法识别?

来自分类Dev

为什么我不能重载::运算符?

来自分类Dev

为什么不能重载三元运算符?

来自分类Dev

microsoft为什么不为stringbuilder重载+ =运算符?

来自分类Dev

为什么不能对类使用运算符重载?

来自分类Dev

为什么我的重载运算符返回零?

来自分类Dev

为什么此运算符重载起作用?

来自分类Dev

为什么C ++运算符重载需要“至少具有一个类类型的参数”?

来自分类Dev

为什么Map的+运算符需要双括号?

来自分类Dev

为什么Map的+运算符需要双括号?

来自分类Dev

重载<<运算符

来自分类Dev

重载<<运算符

来自分类Dev

重载'-'运算符

来自分类Dev

*运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符<<重载

来自分类Dev

重载 >> 运算符

来自分类Dev

运算符重载-重载*

来自分类Dev

此运算符重载函数重载是什么?

来自分类Dev

为什么在实现CompareTo时必须重载运算符?

来自分类Dev

为什么std :: map重载运算符<不使用Compare

来自分类Dev

重载下标运算符时为什么要使用const int参数?

来自分类Dev

为什么以下运算符重载是模棱两可的?

来自分类Dev

为什么在System.Delegate上看不到+ =运算符重载?