为什么矢量不能保存?

时间:2011-08-22 04:09:12

标签: c++ vector

当我想访问向量的一部分(约会)时,它将不允许它,例如只需添加:cout << appointment[1]; 不行。

我也希望将这个向量保存到我的类(约会)中,以便稍后删除向量的元素。我能通过在类中声明向量来做到这一点吗?即

class Appointment { private: vector <string> appointment; }

这是我的全部代码:

void Appointment::loadAppointments()
{
ifstream Appointments;
string line;
vector <string> appointment;
int i = 1;

cout << "You have the following appointments:" << endl;

Appointments.open(DATAFILE);
if (Appointments.is_open())
{

while (!Appointments.eof())
{
getline(Appointments, line, '\n');
appointment.push_back(line); 
}
Appointments.close();
}
cout << "this is a test" << appointment[1] << endl;//This part will not function
}`

3 个答案:

答案 0 :(得分:5)

您在代码中重新声明了两次向量约会;一次作为成员变量,一次作为loadAppointments函数中的局部变量。删除函数中的声明,你应该好好去。

答案 1 :(得分:0)

不是检查EOF,而是将输入循环更改为如下所示:

Appointments.open(DATAFILE);
getline(Appointments, line);

while(Appointments.good())
{
    appointment.push_back(line);
    getline(Appointments, line);
}

//a debug statement to check the number of records read
cout << "Number Appointments: " << appointment.size() << endl;

这将检查在读取文件期间可能发生的任何错误,而不仅仅是查找EOF。此外,您将避免在文件末尾进行双读,因为您从文件中读取行的方式(即,调用getline可能会触发EOF标记,但您仍然会推动从调用line到您的向量中的getline字符串。

其次是,如果您希望将信息与对象一起保存,请将向量appointment设为私有非静态数据成员。如果这样做,则无需在函数本身中将其声明为自动变量。但请记住,如果您决定进行此更改,则每次调用loadAppointments时,您可能需要清空向量,否则您只需将新信息附加到可能过时/过时的信息上,因为向量的生命周期现在比函数本身更长,而是与Appointment对象的生命周期相关联。

答案 2 :(得分:0)

矢量的第一个元素是appointments[0],而不是appointments[1]。在C ++中,向量元素从0开始编号。如果你的约会文件中只有一个条目,那么这可能是你遇到困难的原因。