C++ 从带括号的初始化列表初始化私有聚合
如果我试图编译C++ 从带括号的初始化列表初始化私有聚合,c++,aggregate,c++14,list-initialization,C++,Aggregate,C++14,List Initialization,如果我试图编译 class triangle { private: std::array<std::array<double, 2>, 3> m_vertices; }; triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } }; 类三角形 { 私人: std::数组m_顶点; }; 三角形常数单元{{{{0,0},{1,0},{0,1}}; 我收到了错误信息 无法从“初始值设定
class triangle
{
private:
std::array<std::array<double, 2>, 3> m_vertices;
};
triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } };
类三角形
{
私人:
std::数组m_顶点;
};
三角形常数单元{{{{0,0},{1,0},{0,1}};
我收到了错误信息
无法从“初始值设定项列表”转换为“三角形”
如果将
private
替换为public
,则代码编译成功。既然我不想这样做:如果我想从带括号的init列表中初始化unit\u triangle
,我需要做什么?拥有private
成员可以防止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;
};
类三角形
{
公众:
三角形(标准::数组常量和v)
:m_顶点(v)
{ }
私人:
std::数组m_顶点;
};