Инициализация члена массива типов в суперклассе с использованием списка инициализации производного класса

Как я могу инициализировать массив, который принадлежит суперклассу? Я хочу установить все значения массива суперкласса в списке инициализации моего подкласса.

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 ответ

Решение

Основная ошибка в вашем базовом классе, потому что необработанные массивы не могут быть переданы по значению. Просто используйте 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" } )
    {
    }
};
Другие вопросы по тегам