想象一下,我正在解析一个文件,而且我有一堂课。
class Students{
float grade;
string name;
}
为什么我不能这样做?
Student *James;
James->grade = atof(line[0].c_str());
假设我的线条是字符串。
谢谢!
答案 0 :(得分:4)
正如你所写的那样,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;
}
然后你会读到所有Jame的信息,如:
Student James;
infile >> James;
答案 1 :(得分:0)
它的编写方式Student类的grade属性是私有的。您需要创建一个访问器方法或将该属性设置为public。我推荐第一选择。完成后,您可以使用以下内容完成任务。
James->GetGrade(atof(line[0].c_str()));