问题描述
我在初始化结构数组时遇到问题。代码如下:
#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 },}};
,
您正在尝试初始化 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;
};