1. ホーム
  2. c++

[解決済み] コンストラクタへの未定義の参照

2022-02-14 22:12:51

質問

私はC++を試しているJava開発者です。

新しいクラスを作成したところです。このクラスには、Filterオブジェクトを格納するためのリストが必要です。

フィルター.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() {
}

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

その理由は何でしょうか?

解決方法は?

リンカが、コンストラクタの定義がどこにあるかわからないため、エラーが発生します。

IDEを使用している場合、両方の.cppファイルをプロジェクトに追加して、一緒にコンパイルできるようにすれば、リンカーが定義を見つけることができるはずです。 そうでない場合は、自分でそれらを組み合わせる必要があります - gccを使用していると仮定して。

g++ cars.cpp filter.cpp

はそれらを1つの実行ファイルにまとめるので、表示されないはずです。 その エラー