如何解决在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 },}};
,
您正在尝试初始化 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 举报,一经查实,本站将立刻删除。