Инициализировать частный агрегат из списка фигурных скобок

Если я попытаюсь скомпилировать

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;
};
Другие вопросы по тегам