c++11初始化struct数组
Posted
技术标签:
【中文标题】c++11初始化struct数组【英文标题】:Initialize the array of struct in c++11 【发布时间】:2021-09-21 08:51:29 【问题描述】:我在初始化结构数组时遇到问题。下面是代码:
#include <iostream>
#include <array>
#include <string>
#define NUM_ELEMENT 5
struct Person
std::string m_name;
int m_age = 0;
Person() = default;
Person(std::string name, int age)
: m_name(name), m_age(age)
;
typedef std::array<Person, NUM_ELEMENT> PersonList;
class Detail
public:
void InitializePerson();
private:
PersonList personList;
;
void Detail::InitializePerson()
personList // <------ Getting Error here..
Person("abc", 10),
Person("cde", 20),
Person("pqr", 30),
Person("xyz", 40),
Person("apple", 50),
;
int main()
Detail detail;
detail.InitializePerson();
return 0;
虽然,我知道我可以将 std::vector 与push_back
一起使用,但我想通过静态数组来实现这一点,因为它的元素是固定的。我想用上面的类 Detail 成员初始化数组,因为数据可以是随机的,所以不能在 for loop
by personList[0] = Person;
中做
【问题讨论】:
【参考方案1】:您似乎缺少=
操作员
personList =
Person("abc", 10),
Person("cde", 20),
Person("pqr", 30),
Person("xyz", 40),
Person("apple", 50),
;
【讨论】:
【参考方案2】:好像是这样
personList =
"abc", 10 ,
"cde", 20 ,
"pqr", 30 ,
"xyz", 40 ,
"apple", 50 ,
;
见this answer。
【讨论】:
【参考方案3】:您正在尝试初始化 personList
,这只能在构造时完成 - 但 personList
已经构造,因此不起作用。你应该分配:
personList =
Person("abc", 10),
Person("cde", 20),
Person("pqr", 30),
Person("xyz", 40),
Person("apple", 50),
;
或者:
personList =
"abc", 10,
"cde", 20,
"pqr", 30,
"xyz", 40,
"apple", 50,
;
如果你想初始化它,你可以在 Detail
构造函数中这样做:
class Detail
public:
Detail() :
personList
"abc", 10,
"cde", 20,
"pqr", 30,
"xyz", 40,
"apple", 50,
private:
PersonList personList;
;
【讨论】:
以上是关于c++11初始化struct数组的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 const char * 初始化 C-struct
c语言中,结构体初始化和数组初始化的写法是否一样的?求解,谢谢