c++ - 结构中的 “Incomplete type is not allowed”错误

标签 c++ arrays struct

我的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/

相关文章:

arrays - 有没有办法在 Julia 中旋转 3D 数组?

C 段错误 : 11 error

c++ - float4 - 乘加 - 性能技巧 OpenCL

c++ - 什么是 "Argument-Dependent Lookup"(又名 ADL,或 "Koenig Lookup")?

java - 如何在 Java 中使用 BufferedImage 更改模拟时钟的钟面

csv - 用于字符串比较的 Rust 嵌套迭代器中的所有权和生命周期

c++ - C/C++ 结构内存布局等效

c++ - 从多个线程访问类对象

c++ - 你如何在 C++ 中搜索 std::string 的子字符串?

javascript - 在 JavaScript 中转换值列表中的数组