需要建议。下面的代码,我只是想找出存储在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] 删除。
我来说两句