my 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:
架构x86_64的未定义符号:"TabuSearch::TabuSearch(std::__1::vector<Nodo, std::__1::allocator<Nodo> >)
",引用自:_main
in main没有找到架构x86_64的Ld:符号Clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
TabuSearch(vector<Nodo> n):nod(n);
不应该编译。您只允许在构造定义中放置一个元素初始化列表,而不仅仅是一个前向声明。
你几乎肯定想要:
TabuSearch(vector<Nodo> n):nod(n) {}
有一个主体(尽管是空的),因此是一个定义。
注意:既然你说clang
允许编译完成并继续链接,那么这个bug应该报告给clang团队。12.6.2p1非常清楚地表明,tor-initializer需要一个定义,而不是一个非定义的声明:
在类的构造函数定义中,直接基类和虚基类的子对象以及非静态数据成员的初始化式可以通过参数初始化式指定…