我是一名尝试使用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()'
这是什么原因?
答案 0 :(得分:15)
错误是由链接器生成的,因为它无法看到构造函数的定义所在的位置。
如果您使用的是IDE,则应将两个.cpp文件添加到项目中,以便它们可以一起编译,并且链接器可以找到定义。 它不是,那么你必须自己组合 - 假设你正在使用gcc:
g++ cars.cpp filter.cpp
将它们合并为一个可执行文件,不应向您显示 错误