7

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

我刚刚创建了一个新课程。在我的其他课程中,我想列出可以存储过滤器对象的列表。

过滤器.h

#ifndef FILTER_H_
#define FILTER_H_

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

};

#endif /* FILTER_H_ */

过滤器.cpp

#include "Filter.h"

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

汽车.h

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

汽车.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()'

这是什么原因?

4

1 回答 1

23

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

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

g++ cars.cpp filter.cpp

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

于 2012-08-03T08:53:54.227 回答