数组必须用大括号括起来的初始化器 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
除了这个赋值外,在函数内外的任何地方都没有使用。
你好,我有一个练习,他们给了我这个结构:
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
除了这个赋值外,在函数内外的任何地方都没有使用。