如果我尝试编译
class triangle
{
private:
std::array<std::array<double, 2>, 3> m_vertices;
};
triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } };
我收到错误消息
无法从“初始化列表”转换为“三角形”。
如果我将private
替换为public
,则代码会成功编译。因为我不想这样做:如果我想从braced-init-list初始化unit_triangle
,我需要做什么?
答案 0 :(得分:3)
拥有private
成员会阻止triangle
成为aggregate。它是一个聚合,允许您列出初始化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;
};