Инициализация члена массива типов в суперклассе с использованием списка инициализации производного класса
Как я могу инициализировать массив, который принадлежит суперклассу? Я хочу установить все значения массива суперкласса в списке инициализации моего подкласса.
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" } )
{
}
};