Ошибка: значение типа «const char *» нельзя использовать для инициализации объекта типа «char» - PullRequest
0 голосов
/ 04 апреля 2019

По какой-то причине в указанном ниже коде появляется сообщение об ошибке: «Значение типа« const char ** (разумеется, только одна звездочка) »не может использоваться для инициализации объекта типа« char""Я нахожу это очень странным, так как fname и lname, кажется, ничем не отличаются, но они не выдавали таких ошибок, как я ожидал.Я тоже пытался сделать char phone на char ** phone, но безуспешно.Может кто-нибудь сообщить мне, в чем проблема и как ее исправить?

 struct Name {

    char fname[15];
    char lname[15];

};

struct Info {

    int grade;
    char phone[15];

};

struct Mark {

    int math;
    int sci;
    int eng;

};

struct Student {

    Name n;
    Info i;
    Mark m;

};

int main()
{

Student class_list[MAX_CLASS_SIZE] = {
    // Errors here          V V V V V V V 
    {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}
};

}

1 Ответ

0 голосов
/ 04 апреля 2019

Это

{"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}

- это то, что вы использовали бы, если бы вы определяли и инициализировали один Student объект:

Student student = {
    {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78}
};

Однако вы пытаетесь инициализировать массив из Student объектов, поэтому каждый элемент должен быть в скобках:

Student class_list[MAX_CLASS_SIZE] = {
    { {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78} }
//  1 2                 3                     4
};

1: Student инициализатор объекта.
2: Name инициализатор объекта.
3: Info инициализатор объекта.
4: Mark инициализатор объекта.

С учетом вышесказанного вам следует избегать использования C-строк. Используйте std::string вместо:

#include <string>

struct Name {
    std::string fname;
    std::string lname;
};

struct Info {
    int grade;
    std::string phone;
};

struct Mark {
    int math;
    int sci;
    int eng;
};

struct Student {
    Name n;
    Info i;
    Mark m;
};

int main()
{
    Student class_list[MAX_CLASS_SIZE] = {
        { {"Bob", "Smith"}, {11, "519-688-5168"}, {88, 75, 78} }
    };
}
...