クラスがPoint2D
あり、入力演算子をオーバーロードしようとしています >>
class Point2D
{
public:
Point2D(int,int);
int getX();
int getY();
void setX(int);
void setY(int);
double getScalarValue();
bool operator < ( const Point2D& x2) const
{
return x < x2.x;
}
friend istream& operator >> (istream&,Point2D);
protected:
int x;
int y;
double distFrOrigin;
void setDistFrOrigin();
};
私の主な機能の外
#include <iostream>
#include <fstream>
#include "Line2D.h"
#include "MyTemplates.h"
#include <string>
#include <set>
using namespace std;
istream operator >> (istream& is , Point2D p2d)
{
string p;
getline(is,p,'\n');
int position = p.find(", ");
string k = p.substr(0,position);
if ( k == "Point2D")
{
string x = p.substr(10,1);
int x_coordinate = atoi(x.c_str()); // atoi(x.c_str()) convert string x to int
p2d.setX(x_coordinate);
}
return is;
}
私の int main() で
int main()
{
fstream afile;
string p;
afile.open("Messy.txt",ios::in);
if (!afile)
{
cout<<"File could not be opened for reading";
exit(-1);
}
Point2D abc;
afile>>abc;
set<Point2D> P2D;
P2D.insert(abc);
set<Point2D>::iterator p2 = P2D.begin();
while ( p2 != P2D.end() )
{
cout<<p2->getX();
p2++;
}
}
エラーが発生する理由がわかりません:
c++ は型のない istream の宣言を禁止します
名前空間 std を使用して iostream 、 fstream を既に含めていますが、何が問題なのかわかりません