0

所以想象我正在解析一个文件,并且我有一个学生类。

    class Students{
          float grade; 
          string name;
     }

为什么我不能这样做?

    Student *James; 
    James->grade = atof(line[0].c_str()); 

假设我的线是字符串。

谢谢!

4

2 回答 2

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;
}

然后你会阅读詹姆斯的所有信息,例如:

Student James;
infile >> James;
于 2013-10-24T01:22:53.567 回答
0

Student 类的grade 属性是私有的。您需要创建访问器方法或公开属性。我推荐第一选择。完成后,您可以使用以下内容来完成您的任务。

James->GetGrade(atof(line[0].c_str()));
于 2013-10-24T02:31:40.650 回答