微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在c++11中初始化struct数组

如何解决在c++11中初始化struct数组

我在初始化结构数组时遇到问题。代码如下:

#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 中通过 personList[0] = Person{};

解决方法

似乎您缺少 = 运算符

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

this answer

,

您正在尝试初始化 personList,这只能在构建时完成 - 但 personList 已经构建,因此不起作用。你应该分配

personList = {
    Person("abc",};

或者:

personList = {{
    {"abc",10},{"cde",20},{"pqr",30},{"xyz",40},{"apple",50},}};

如果你想初始化它,你可以在 Detail 构造函数中这样做:

class Detail {
public:
    Detail() :
        personList{{
            {"abc",}}
    {}

private:
    PersonList personList;
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。