首页 > 解决方案 > 结构中的错误“不允许不完整类型”

问题描述

我在我的 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);
    }
}

什么写的不完整?我必须以其他方式处理它吗?请为此建议我一些解决方案。

谢谢!

标签: c++arraysstruct

解决方案


所以代码中有很多问题,主要是类型不兼容。

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 个浮点数的数组。

你必须更仔细地考虑你声明的类型和你给东西的名字。你真的想要sGrade20个名字和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);
    }
}

推荐阅读