使用带指针的atof

时间:2013-10-24 01:19:00

标签: c++ pointers

想象一下,我正在解析一个文件,而且我有一堂课。

    class Students{
          float grade; 
          string name;
     }

为什么我不能这样做?

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

假设我的线条是字符串。

谢谢!

2 个答案:

答案 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()));