我想从用户指定为对象向量的文件名中读取数据。每个向量元素有五个不同的成员变量,我想读入。在文件中,将有多个条目(五个成员变量的组)必须读入每个向量元素。到目前为止,这是我的(不完整)代码:
while (!inputFile.eof())
{
for (unsigned int count = 0; inputFile.eof(); count++)
{
cout << "Vehicle #" << (count + 1) << endl;
inputFile >> temp[count].setVIN();
cout << "VIN: " << temp[count].getVIN() << endl;
inputFile >> temp[count].setMake() << endl;
cout << "Make: " << temp[count].getMake() << endl;
inputFile >> temp[count].setModel() << endl;
cout << "Model: " << temp[count].getModel() << endl;
inputFile >> temp[count].setYear() << endl;
cout << "Year: " << temp[count].getYear() << endl;
inputFile >> temp[count].setPrice() << endl;
cout << "Price: " << temp[count].getPrice() << endl
<< endl;
}
}
但是,此代码已存在一些问题。其中之一是setVIN()
,setMake()
,setModel()
,setYear()
和setPrice
成员函数需要一个参数(设置VIN的值,制作,模型等)。这是类声明:
class Vehicle
{
private:
string VIN;
string make;
string model;
int year;
double price;
public:
Vehicle(string, string, string, int, double);
Vehicle();
string getVIN();
string getMake();
string getModel();
int getYear();
double getPrice();
void setVIN(string);
void setMake(string);
void setModel(string);
void setYear(int);
void setPrice(double);
};
最后,考虑到我发布的第一个代码块,在inputFile >> .....
行的错误消息中指出“无操作数”&gt;&gt;'匹配这些操作数操作数类型是std :: ifstream&gt;&gt; void“
有人可以帮助我度过这个障碍吗?
谢谢!
答案 0 :(得分:2)
首先这段代码很糟糕。
inputFile >> temp[count].getVIN();
它从getVIN()
获取一个字符串,然后尝试读入临时字符串。你需要使用类似的东西:
string vin;
inputFile >> vin;
temp[count].setVin(vin);
其次,创建一个读取整个对象的operator>>
更加理想,以便你的循环更清晰。
istream& operator>>(istream& is, Vehicle & v) {
string vin;
inputFile >> vin;
v.setVin(vin);
...
}
如果你把它变成一个成员函数,你可以改写
// You probably want to add error checking to each read too
void Vehicle::readFromStream(istream & is) {
is>>vin;
is>>make;
...
}
istream& operator>>(istream& is, Vehicle & v) {
v.readFromStream(is);
return is;
}
然后你的循环将成为
Vechicle v;
while(input>>v) {
std::cout<<v<<std::endl;
}
只要你添加一个明智的operator<<
(以同样的方式。)
如果你真的想将它们存储在列表中,那么:
std::vector<Vehicle> vehicles;
Vehicle v;
while(input>>v) {
vehicles.push_back(v);
}