#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;
Я рекомендую вам предоставить соответствующие конструкторы для ваших различных структур, а не полагаться на агрегированную инициализацию. В противном случае, если вы измените порядок своих участников или добавите или удалите участников, ваш код сломается. Он хрупкий, как у вас есть.