所以想象我正在解析一个文件,并且我有一个学生类。
class Students{
float grade;
string name;
}
为什么我不能这样做?
Student *James;
James->grade = atof(line[0].c_str());
假设我的线是字符串。
谢谢!
正如你所写的,它James
只是一个指针——它并不指向一个实际的Student
对象(请注意,你也拼错了拼写——“学生”在一个地方,“学生”在另一个地方) . 你可能想要这样的东西:
Student James;
James.grade = atof(line[0].c_str());
假设您使用的是相当新的编译器,您可以更轻松地做到这一点:
James.grade = std::stof(line[0]);
如果您真的坚持James
要成为指针,则需要创建一个Student
对象以使其指向:
Student *James = new Student;
James->grade = std::stoi(line[0]);
大多数时候,我宁愿把这段代码放进去operator>>
。假设文件中的一行类似于grade name
,我会执行以下操作:
std::istream &operator>>(std::istream &is, Student &s) {
is >> s.grade;
std::getline(is, s.name);
return is;
}
然后你会阅读詹姆斯的所有信息,例如:
Student James;
infile >> James;
Student 类的grade 属性是私有的。您需要创建访问器方法或公开属性。我推荐第一选择。完成后,您可以使用以下内容来完成您的任务。
James->GetGrade(atof(line[0].c_str()));