Инициализация массива структур выдает ошибку

#c #initializer-list #aggregate-initialization

#c #инициализатор-список #агрегат-инициализация

Вопрос:

Я создал эту программу, но при компиляции появляется следующее сообщение об ошибке:

функция ‘void FillDatabase()’: main.cpp:59:4: ошибка: не удалось преобразовать ‘…. из ‘<список инициализаторов, заключенный в скобки>’ в ‘Расписание’

Это мой код :

 #include <iostream>
#include <string>
using namespace std;

struct Courses{
   long Course_ID;
    string name; 
    float Hours;
};

struct Students {
    long ID;
    string name; 
}; 

struct Instructors {
    long ID;
    string name; 
    string Email; 
    string Course; 
};

struct Schedule {
    Courses Course;
    Instructors instructor; 
    Students Student[10]; 
    std::string Hall_NO; 
    int Time=0;
};

void FillDatabase() 
{
   struct Schedule Sch[10]={
   
  {100,"C   Basics",10.30f,10,"ahmed manna","gggg@gmail.com","c  ",{ 10, "ali"},
        { 20, "Mohammed"},
        { 30, "Ahmad"},
        { 40, "Safaa"},
        { 50, "Marwa"},
        { 60, "Hind"},
        { 70, "Ibrahim"},
        { 80, "Ghada"},
        { 90, "Mahmud"},
        { 100, "Abdulsalam"},
        "holl_5",11}
       
   };
 

Где обнаружена проблема? Или какие-либо другие решения?

Комментарии:

1. @AHMEDMANNA для обращения к какому-то одному использованию @ , а не # для уведомления соответствующего лица

Ответ №1:

Вы пытаетесь сделать слишком много с однострочниками, а затем увязаете в неправильном размещении фигурных скобок. Многое было бы более очевидным для вас, если бы вы правильно сделали отступ. Это должно выглядеть так.

 void FillDatabase()
{
    Schedule Sch[10] = {
        {
            { 100, "C   Basics", 10.30f },
            { 10,"ahmed manna", "gggg@gmail.com", "c  " },
            {
                { 10, "ali" },
                { 20, "Mohammed" },
                { 30, "Ahmad" },
                { 40, "Safaa" },
                { 50, "Marwa" },
                { 60, "Hind" },
                { 70, "Ibrahim" },
                { 80, "Ghada" },
                { 90, "Mahmud" },
                { 100, "Abdulsalam" },
            },
            "holl_5",
            11
        },
    }; 
}
 

После этого у вас все еще возникает проблема, связанная с тем, что этот тип агрегированной инициализации сопряжен со многими требованиями, одним из которых является отсутствие инициализаторов элементов по умолчанию, как в этой строке:

 int Time=0;
 

Вам нужно изменить это на

 int Time;
 

Я рекомендую вам предоставить соответствующие конструкторы для ваших различных структур, а не полагаться на агрегированную инициализацию. В противном случае, если вы измените порядок своих участников или добавите или удалите участников, ваш код сломается. Он хрупкий, как у вас есть.