【问题标题】:Initialize the array of struct in c++11c++11初始化struct数组
【发布时间】: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{}; 中做

【问题讨论】:

    标签: c++ arrays c++11 struct


    【解决方案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;
        };
        

        【讨论】:

          猜你喜欢
          • 2017-07-21
          • 2019-07-10
          • 2014-02-02
          • 1970-01-01
          • 1970-01-01
          • 2016-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多