Ошибка "Неполный тип недопустим" в структуре - PullRequest
1 голос
/ 28 мая 2020

Я получаю ошибку «Неполный тип не допускается» в моем коде на C ++.

Моя программа предназначена для чтения данных учащихся из входного файла, сортировки имен в алфавитном порядке и распечатки отсортированных имен вместе с данными. Данные включают идентификационные номера и результаты тестов.

Входной файл включает повторение следующего: 1. Количество студентов (то есть 16) 2. Количество тестов (то есть 6) 3. Имя ученика 4. Идентификационный номер 5 - 10. Тест оценки

Выходной файл должен включать в себя повторение следующего: 1. Имя 2. Идентификационный номер 3. Первый балл за тест 4. Средний балл 5. Буквенная оценка

Ниже приведены мои строки для struct:

struct sGrade 
{ 
    string Name[20]; 
    int IDnum[20]; 
    float scores[5]; 
}; 

Но прямо здесь, в основной строке, «grade» из строки «sGrade grade [size]» получает такую ​​ошибку.

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);
    }
}

Что написано не полностью? Должен ли я подходить к этому по-другому? Пожалуйста, предложите мне несколько решений для этого.

Спасибо!

1 Ответ

0 голосов
/ 28 мая 2020

Итак, в коде много проблем, в основном из-за несовместимости типов.

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 идентификаторов? Или (что более вероятно) вы действительно хотите, чтобы sGrade имел одно имя и один идентификатор, но затем объявил массив из 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...