7

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

私はちょうど新しいクラスを作成しました。私の他のクラスでは、 Filter オブジェクトを格納できるリストが必要です。

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() {
}

車.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

それらを1つの実行可能ファイルに結合し、そのエラーを表示するべきではありません

于 2012-08-03T08:53:54.227 に答える