【问题标题】:Undefined reference to constructor对构造函数的未定义引用
【发布时间】:2012-08-03 08:39:42
【问题描述】:

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

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

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()'

这是什么原因?

【问题讨论】:

  • 这甚至不会编译。你确定这是真正的代码吗?如果是这样,您正在以错误的方式编译项目。你是怎么做到的?
  • 您能发布您的 g++ 构建说明吗?
  • 如果你对C++是认真的,请拿起一本好书好好学习。按照你的方式,你最终会遇到一个可怕的、泄漏的、有缺陷的 java 式的混乱。 C++ 与 Java 不同
  • 拜托,拜托 获取a good book on C++,忘记你从 Java 中知道的一切。 C++ 重视完全不同的东西,如果你尝试像在 Java 中一样编程,只会损害你的 C++ 体验。
  • @Ole-M:您的具体问题在于您构建代码的方式。如果您以正确的方式构建它,您将不会收到上述错误。实际问题似乎是您的构建中没有包含 Filter.cpp。与 Java 不同,每个 C++ 编译器都是不同的。你需要学习如何使用你拥有的编译器。

标签: c++ g++


【解决方案1】:

这个错误是链接器产生的,因为它看不到构造函数的定义在哪里。

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

g++ cars.cpp filter.cpp

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

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多