我试图在lambda中包装几个构造函数,以便将它们存储在一个向量中,然后在它上面循环:
using move_constructor = std::function<Move*(Site,vector<Move*>*, int)>;
vector<move_constructor> diff_plane_list = {
[](Site p_site, vector<Move*>* move_list, int latLen) {
return new Diffuse_inplane_px(p_site, move_list, latLen);
},
[](Site p_site, vector<Move*>* move_list, int latLen) {
return new Diffuse_inplane_mx(p_site, move_list, latLen);
},
...
}
但是,当尝试使用g ++ - 5.3编译它时,我会在向量中的每个项目中收到以下错误消息:
/tmp/ccc2A87Z.o: In function `{lambda(std::tuple<int, int, int>, std::vector<Move*, std::allocator<Move*> >*, int)#1}::operator()(std::tuple<int, int, int>, std::vector<Move*, std::allocator<Move*> >*, int) const':
All_moves.cc:(.text+0x5e): undefined reference to `Diffuse_inplane_px::Diffuse_inplane_px(std::tuple<int, int, int>, std::vector<Move*, std::allocator<Move*> >*, int)'
所以vector<Move*>*
会以某种方式投射到vector<Move*, std::allocator<Move*> >*
?
我该怎么做呢?有没有更好的方法来循环构造函数列表并将指针存储到向量中创建的对象?
答案 0 :(得分:2)
“未定义的引用”:您没有提供指定的Diffuse_inplane_px
构造函数的定义。
提供一个并确保它链接到项目。