c++ - 结构中的错误“不允许不完整类型”
问题描述
我在我的 c++ 代码中收到“不允许不完整类型”错误。
我的程序是从输入文件中读取学生数据,按字母顺序对姓名进行排序,然后将排序后的姓名连同其数据一起打印出来。数据包括身份证号码和考试成绩。
输入文件包括以下内容的重复: 1. 学生人数(16 人) 2. 考试次数(6 人) 3. 学生姓名 4. ID 号 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);
}
}
推荐阅读
- sql-server - 在 SSIS 中执行批处理脚本
- java - 无法对不完整的日期进行日期例外处理
- android - Android Firebase 身份验证在发布 APK 上不起作用
- c# - 避免重复对象初始值设定项以在 Linq-to-Entities 中创建派生对象而不使用 linq-to-objects
- c# - 使用websocket和http时的nginx配置?
- asp.net-mvc - 在asp.net mvc中从视图调用控制器并将值从视图传递给控制器
- node.js - Sequelize 重复键值违反唯一约束
- linux - 发现大小写错误的文件引用,因为文件系统区分大小写
- c# - 指定的 EntityFramework 架构无效异常
- javascript - Socket.io / Node.js 消息发送给不良用户