我的C++代码收到“不允许输入不完整的类型”错误。
我的程序是从输入文件中读取学生数据,按字母顺序对名称进行排序,并打印出排序的名称及其数据。数据包括ID号和测试分数。
输入文件包括以下内容的重复:
1.学生人数(16)
2.测试数量(6)
3.学生姓名
4.身份证号码
5-10.测试成绩
输出文件应包括以下内容的重复:
1.名称
2.身份证号码
3.初试成绩
4.平均分数
5.字母等级
以下是我的结构行:
struct sGrade
{
string Name[20];
int IDnum[20];
float scores[5];
};
但是在这里,在主线中,“sGrade grade [size]”行中的“grade”会收到这种错误。
string s;
getline(inputf, s);
sizeS = stoi(s);
string t;
getline(inputf, t);
sizeT = stoi(t);
const int size = 16;
sGrade grade[size];
for (int i = 0; i < size; ++i)
{
getline(inputf, grade[i].Name);
getline(inputf, s);
grade[i].IDnum = stoi(s);
for (int j = 0; j < sizeT; ++j)
{
getline(inputf, grade[i].scores);
}
}
什么写得不完整?我是否必须以其他方式处理?请给我建议一些解决方案。
谢谢!
最佳答案
因此,代码中存在许多问题,主要是关于类型不兼容的问题。
getline(inputf, grade[i].Name);
表示
grade[i].Name
应该是一个字符串,但是它声明为20个字符串的数组。grade[i].IDnum = stoi(s);
表示
grade[i].IDnum
应该是int
,但声明为20个整数的数组getline(inputf, grade[i].scores)
表示
grade[i].scores
应该是一个字符串,但是它声明为5个浮点数的数组。您必须更仔细地考虑声明的类型和名称。您是否真的想要
sGrade
具有20个名称和20个ID?或者(更可能的是)您真的希望sGrade
具有一个名称和一个ID,然后声明一个包含20个sGrades的数组吗?我认为代码应该是这样,但只有您一定会知道
struct sGrade
{
string Name;
int IDnum;
float scores[5];
};
for (int i = 0; i < size; ++i)
{
getline(inputf, grade[i].Name);
getline(inputf, s);
grade[i].IDnum = stoi(s);
for (int j = 0; j < sizeT; ++j)
{
getline(inputf, s);
grade[i].scores[j] = stof(s);
}
}
关于c++ - 结构中的 “Incomplete type is not allowed”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62059211/