数组必须用大括号括起来的初始化程序 c++ 初始化
Posted
技术标签:
【中文标题】数组必须用大括号括起来的初始化程序 c++ 初始化【英文标题】:array must be initialized with a brace-enclosed initializer 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_pstoi(n),name,s;
p = &join_p;
但是我有这个错误,我不明白为什么以及如何解决它:
error: array must be initialized with a brace-enclosed initializer
Personne join_pstoi(n),name,s;
我试图将括号放在不同的地方,就像他们在我的课程或其他网站上所说的那样,但它不想工作
【问题讨论】:
【参考方案1】:在此声明中
Personne join_pstoi(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_pstoi(n),name,s;
p = &join_p;
没有太大意义,因为指针p
没有在函数内部或外部的任何地方使用,除了这个赋值。
【讨论】:
我应该如何将name
复制到join_p.nom
?对不起,我是从 C++ 开始的。
@rob_runner 只需将结构的数据成员 nom 声明为 std::string 类型。在这种情况下,您将能够编写 Personne join_pstoi(n), nom, s;并且数组名称将是多余的。
问题是我不允许更改结构
@rob_runner 您需要在数组名称后面附加终止零 '\0',然后您可以使用标准 C 字符串函数 strcpy 将其复制到数据成员 nom 中。但是正如我指出的那样,您的功能无论如何都没有意义。
我就像我的练习所说的那样:创建一个指向结构的指针,然后初始化指针上的所有变量以上是关于数组必须用大括号括起来的初始化程序 c++ 初始化的主要内容,如果未能解决你的问题,请参考以下文章