Инициализировать частный агрегат из списка фигурных скобок
Если я попытаюсь скомпилировать
class triangle
{
private:
std::array<std::array<double, 2>, 3> m_vertices;
};
triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } };
Я получаю сообщение об ошибке
невозможно преобразовать из "списка инициализаторов" в "треугольник".
Если я заменю private
от public
код успешно компилируется. Поскольку я не хочу этого делать: что мне нужно делать, если я хочу инициализировать unit_triangle
из списка инициалов?
1 ответ
Решение
Иметь private
член мешает triangle
из совокупности. Это агрегат, который позволяет вам инициализировать список triangle
без triangle
имея конструктор. Вот почему это работает, когда вы заменяете private
с public
,
Чтобы поддерживать синтаксис, который вы хотите, вам просто нужно добавить соответствующий конструктор. В этом случае:
class triangle
{
public:
triangle(std::array<std::array<double, 2>, 3> const& v)
: m_vertices(v)
{ }
private:
std::array<std::array<double, 2>, 3> m_vertices;
};