初始化列表向量构造函数

时间:2016-01-10 17:35:59

标签: c++ c++11 vector initializer-list

我正在尝试定义一个类构造函数,它接受initializer_list参数并使用它来构造包含的向量。

//header
template<typename VertexType, typename IndexType>
class Mesh
{
public:
    Mesh(std::initializer_list<VertexType> vertices);
private:
    std::vector<VertexType> mVertexData;
};

// cpp
template<typename VertexType, typename IndexType>
Mesh<VertexType, IndexType>::Mesh(std::initializer_list<VertexType> vertices)
{
    mVertexData(vertices);
}

编译失败,出现以下错误:

error: no match for call to '(std::vector<Vertex,
std::allocator<Vertex> >) (std::initializer_list<NRK::Vertex>&)'
mVertexData(vertices);

不确定我做错了什么。任何提示?

我正在使用QTCreator 5.4.2和MinGW在Windows上进行编译。

1 个答案:

答案 0 :(得分:4)

您正尝试在完全创建的operator()上呼叫呼叫操作员(vector)。 您应该使用ctor-init-list(首选)中的构造函数,或者调用成员函数assign

template<typename VertexType, typename IndexType>
Mesh<VertexType, IndexType>::Mesh(std::initializer_list<VertexType> vertices)
: mVertexData(vertices)
{}

顺便说一句,你是否确定定义模板中的成员,该实现文件是否可行? 你真的在那里实例化了所有需要的专业吗?