【问题标题】:array must be initialized with a brace-enclosed initializer c++数组必须用大括号括起来的初始化程序 c++ 初始化
【发布时间】:2021-07-18 00:48:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ arrays struct compiler-errors initialization


    【解决方案1】:

    在此声明中

    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 没有在函数内部或外部的任何地方使用,除了这个赋值。

    【讨论】:

    • 我应该如何将name复制到join_p.nom?对不起,我是从 C++ 开始的。
    • @rob_runner 只需将结构的数据成员 nom 声明为 std::string 类型。在这种情况下,您将能够编写 Personne join_p{stoi(n), nom, s};并且数组名称将是多余的。
    • 问题是我不允许更改结构
    • @rob_runner 您需要在数组名称后面附加终止零 '\0',然后您可以使用标准 C 字符串函数 strcpy 将其复制到数据成员 nom 中。但是正如我指出的那样,您的功能无论如何都没有意义。
    • 我就像我的练习所说的那样:创建一个指向结构的指针,然后初始化指针上的所有变量
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2016-04-14
    相关资源
    最近更新 更多