当我想访问向量的一部分(约会)时,它将不允许它,例如只需添加: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
}`
答案 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开始编号。如果你的约会文件中只有一个条目,那么这可能是你遇到困难的原因。