数组必须用大括号括起来的初始化器 c++ 初始化

array must be initialized with a brace-enclosed initializer c++

你好,我有一个练习,他们给了我这个结构:

enum Sexe { INCONNUE=0, MASCULIN=1, FEMININ=2};

struct Personne {
    int numero;
    char nom[10];
    Sexe sexe;
};

我需要制作一个指针并为其赋值。所以我做了这个功能:

void Init() {
        Personne *p;
        string sexe;
        Sexe s;
        string n;
        string nom;
        char name[10];
        cout << "Choisissez le numero de la personne";
        cin >> n;
        cout << "Choisissez le nom de la personne";
        cin >> nom;
        cout << "Choisissez le sexe de la personne";
        cin >> sexe;
        for (int i = 0; i < nom.length(); i++){
            name[i] = nom[i];
        }
        if (sexe == "1" || sexe == "Masculin" || sexe == "masculin" || sexe == "MASCULIN") {
            s = Sexe::MASCULIN;
        } else if (sexe == "1" || sexe == "Feminin" || sexe == "feminin" || sexe == "FEMININ") {
            s = Sexe::FEMININ;
        } else {
            s = Sexe::INCONNUE;
        }
        Personne join_p{stoi(n),name,s};
        p = &join_p;
}

但是我有这个错误,我不明白为什么以及如何解决它:

error: array must be initialized with a brace-enclosed initializer
         Personne join_p{stoi(n),name,s};

我试着把括号放在不同的地方,就像他们在我的课程或其他网站上说的那样,但它不想工作

在此声明中

Personne join_p{stoi(n),name,s};

结构Personne的数据成员声明为

char nom[10];

也就是说它是一个数组,

但是用作初始值设定项的数组 name 被隐式转换为指向其第一个元素的指针。

所以你试图用指针初始化一个数组。

您不能用指针初始化数组。您需要将数组 name 复制到数组 join_p.nom.

注意数组name不包含字符串,但数据成员nom似乎必须包含字符串。

无论如何这个循环

for (int i = 0; i < nom.length(); i++){
    name[i] = nom[i];
}

是不安全的,因为你可以在数组 name.

之外写入

结构的数据成员 nom 最初的类型为 std::string.

会更好

还有这些说法

Personne join_p{stoi(n),name,s};
p = &join_p;

没有什么意义,因为指针 p 除了这个赋值外,在函数内外的任何地方都没有使用。