使用派生类的初始化列表初始化超类中的类型数组的成员

时间:2016-02-07 09:02:07

标签: c++ inheritance initialization-list

如何初始化属于超类的数组?我想在我的子类的初始化列表中设置超类的数组的所有值。

struct Foo
{
    std::string arr_[3];
    Foo(std::string arr[3])
    :arr_(arr)
    {  
    }

};

class PersonEntity : public Foo 
{
public:
    PersonEntity(Person person)
    :Foo(
    {
        {"any string"},
        {"any string"},
        {"any string"}
    })

    {
    }
};

1 个答案:

答案 0 :(得分:3)

主要错误在您的基类中,因为原始数组不能按值传递。只需使用std::array来获得适当的值语义。

在派生类中,花括号太多了。你不需要内在的。

这是一个固定版本(我还删除了与该问题完全无关的Person参数):

#include <array>
#include <string>

struct Foo
{
    std::array<std::string, 3> arr;
    Foo(std::array<std::string, 3> const& arr) : arr(arr)
    {  
    }

};

class PersonEntity : public Foo 
{
public:
    PersonEntity()
    : Foo( { "any string", "any string", "any string" } )
    {
    }
};