未定义的构造函数引用

时间:2012-08-03 08:39:43

标签: c++ g++

我是一名尝试使用C ++的Java开发人员。

我刚刚创建了一个新类。在我的另一个类中,我想要列出可以存储Filter对象的列表。

Filter.h

#ifndef FILTER_H_
#define FILTER_H_

class Filter {
public:
  Filter(int id);
  int id;
  ~Filter();

};

#endif /* FILTER_H_ */

Filter.cpp

#include "Filter.h"

Filter::Filter(int id) {
this.id = id;
}
Filter::~Filter() {
}

Cars.h

#include "Filter.h"
...
...
private:
  std::vector<Filter> filters;

Cars.cpp

所以在这里的一个函数中我尝试这样做:

int id = 2;
Filter *filter = new Filter(id);

生成此错误:

Cars.cpp:120: undefined reference to `Filter::Filter(int)'
stl_construct.h:83: undefined reference to `Filter::~Filter()'

这是什么原因?

1 个答案:

答案 0 :(得分:15)

错误是由链接器生成的,因为它无法看到构造函数的定义所在的位置。

如果您使用的是IDE,则应将两个.cpp文件添加到项目中,以便它们可以一起编译,并且链接器可以找到定义。 它不是,那么你必须自己组合 - 假设你正在使用gcc:

g++ cars.cpp filter.cpp

将它们合并为一个可执行文件,不应向您显示 错误