gpt4 book ai didi

C++ 结构指针指向对象类型错误

转载 作者:行者123 更新时间:2023-11-27 22:48:03 25 4
gpt4 key购买 nike

我对 C++ 结构有疑问。在我下面的程序中,我试图从文件中读取考试题数、考试答案以及学生考试答案文件。一切正常,但是当我尝试将学生的信息放入结构数组时,变量 id 出于某种原因不起作用。 Microsoft Visual Studio 2017 RC 编译器说“students->id[i]”有一个错误:“表达式必须有指向对象类型的指针”,我不知道为什么。我标记了问题所在并删除了其余代码,我所拥有的只是正在使用的函数 calculateGrade。我已经为此工作了一段时间,如果不解决这个问题,我什么都做不了。感谢您的帮助!

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct studentInfo {
int id;
string firstName;
string lastName;
string exam;
};
double calculateGrade(struct studentInfo);
int main() {
const int SIZE = 12;
studentInfo students[SIZE];
string fileName, key, studentFile;
ifstream file, fileForStudents;
int numOfQuestions, i = 0, id;

cout << "Please enter a file name: ";
cin >> fileName;

file.open(fileName);
if (!file.is_open()) {
cout << "Could not open file";
}

file >> numOfQuestions >> key >> studentFile;

fileForStudents.open(studentFile);
if (!fileForStudents.is_open()) {
cout << "Could not open file";
}

while (!fileForStudents.eof()) {

fileForStudents >> id >> students->firstName[i] >> students->lastName[i] >> students->exam[i];

students->id[i] = id; //issue is here

i++;
}

calculateGrade(students[SIZE]);


return 0;
}

最佳答案

你只是把索引放错了地方 - 它应该是 students[i].firstName 而不是 students->firstName[i] 等等,如 students 是数组。

这行也是不正确的:

calculateGrade(students[SIZE]);

它可能会编译,但您需要 UB 进行越界访问。如果您需要传递整个数组,则传递指向第一个元素和大小的指针,但最好使用 std::vectorstd::array 并通过引用传递它。

所以对于为什么这样的代码的其他问题:

 students->firstName[i]

编译,首先 students 是一个 C 风格的数组,它可以隐式衰减为指向第一个元素的指针,所以 students->firstName 等于 students[0].firstName 然后 students->firstName[i] 等于 students[0].firstName[i] 将访问第 i 个来自字符串的符号。

所以还有另一个使用 std::vector 的原因 - 你的表达式 students->firstName[i] 不会编译或者不提供这样的代码是错误的表达式正确。

关于C++ 结构指针指向对象类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41049125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com