我有两个矩形对象,我试图用readcood()读取文本文件中的不同行但是当我运行它时,我从文本文件中得到相同的行。
#include<iostream>
#include<fstream>
using namespace std;
class rect{
int xcood[3],ycood[3],x1,x2,x3,x4,y1,y2,y3,y4;
public:
void readcood()
{
char dummy;
ifstream myfile;
myfile.open("coordinates.txt");
for(int i=0;i<4;i++)
{
myfile>>xcood[i]>>dummy>>ycood[i];
}
}
void printcood()
{
for(int i=0;i<4;i++)
{
cout<<xcood[i]<<"\t"<<ycood[i]<<endl;
}
}
};
int main()
{
char dummy;
string coordinates;
rect rectangle1,rectangle2;
rectangle1.readcood();
rectangle2.readcood();
rectangle1.printcood();
rectangle2.printcood();
}
答案 0 :(得分:3)
这是因为你在函数中打开文件。当函数返回时,文件流对象将被破坏,你所做的一切都将丢失。
您可以在main
函数中打开它并将其(通过引用)传递给读取函数。
另一种解决方案是向open
类添加rect
函数,该函数打开文件,并使文件流成为该类的成员。
但是我建议的解决方案是创建自己的重载输入函数,它接受一个rect
对象并读入。像
class rect
{
public:
...
friend std::istream& operator>>(std::istream& is, rect& r)
{
char dummy;
for (int i = 0; i < 3; ++i)
is >> r.xcood[i] >> dummy >> r.ycood[i];
return is;
}
...
};
然后你可以简单地做例如。
std::ifstream file("some/path/file");
rect r1, r2;
file >> r1 >> r2;