在C++类的构造函数中,如何给一个结构向量作为参数?

在C++类的构造函数中,如何给一个结构向量作为参数?,c++,c,xcode,class,struct,C++,C,Xcode,Class,Struct,我的结构: struct Nodo { float x; float y; }; 我的班级: class TabuSearch{ vector<Nodo> nod; public: TabuSearch(vector<Nodo> n):nod(n); }; 我的主要 int num_ciudades = 30; vector<Nodo> nodo(num_ciudades); TabuSearch t(nodo); 我在xcode上遇到

我的结构:

struct Nodo {
float x;
float y;
};
我的班级:

class TabuSearch{
    vector<Nodo> nod;
public:
    TabuSearch(vector<Nodo> n):nod(n);

};
我的主要

int num_ciudades = 30;
vector<Nodo> nodo(num_ciudades);
TabuSearch t(nodo);
我在xcode上遇到此错误:

架构x86_64的未定义符号: TabuSearch::TabuSearchstd::_1::vector,引用自: _主音中的主音 ld:未找到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1。请使用-v查看TabuSearchvector n:nodn的调用

;不应该编译。您只允许在构造定义上放置一个ctor初始值设定项列表,而不仅仅是一个向前声明

你几乎肯定想要:

TabuSearch(vector<Nodo> n):nod(n) {}
它有一个身体,虽然是空的,因此是一个定义

注意:既然您说clang允许编译完成并继续链接,那个bug应该报告给clang团队。12.6.2p1非常清楚,ctor初始值设定项需要定义,而不是非定义声明:

在类的构造函数定义中,直接基子对象和虚拟基子对象以及非静态数据成员的初始值设定项可以由ctor初始值设定项指定


该代码无法编译,但您引用的是链接器错误?不要试图从根本上改变问题。编辑是为了澄清和修正解释中的错误。@BenVoigt似乎有点刻薄,这显然是一个输入错误…@PeterSW:声明和定义之间的区别从根本上与未定义的符号错误有关。@BenVoigt很明显,这是代码为OP编写的上下文中的输入错误。如果我们真的想帮助而不是得分,我们应该接受OP的编辑并查看链接无论如何,我会将它大量修改为:TabuSearchvector&&x:nodmovex{},调用:TabuSearch-tmovenodo@oopsecene:然后问题中的代码不会调用它,因为它不会传递右值。但是,去掉&&,它就完美了。