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初始化struct变量[关闭]

c语言中,结构体初始化和数组初始化的写法是否一样的?求解,谢谢

C#struct最佳实践,可能存在矛盾吗?

定义一个结构体数组,可以在初始化里直接赋值吗?比如 struct a int d=0; b[1

c语言memset(&a, 0, sizeof(struct customer));