数日間、Code::Blocks IDE (Linux、Ubuntu 64 ビット) を使用して、C++ で記述された 1 つのプロジェクトをコンパイルしようとしています。コードは有効ですが、リンカー エラーがいくつかあります。クラスでインライン定義されておらず、他のファイルにある関数に対して「未定義の参照」というエラーが発生することに気付きました (クラスは i *.h ファイルで、これらの関数の定義は *.cpp にあります)。独自の Makefile を作成しようとしましたが、役に立ちませんでした。
メイクファイル:
all: project
project: main.o DList.o Person.o
g++ main.o DList.o Person.o -o project
main.o: main.cpp
g++ -c main.cpp
DList.o: include/DList.cpp
g++ -c include/DList.cpp
Person.o: include/Person.cpp
g++ -c include/Person.cpp
clean:
rm -rf *.o
ネットでこれらのエラーについていくつか読んだのですが、どうすればよいかわかりません。
// 編集 Object.cpp と Object.h を Person.cpp と Person.h に変更し、*.cpp ファイルをメイン ディレクトリに移動し、*.cpp ファイルの #include パスを変更しました。
エラー:
obj/Debug/main.o||In function `main':|
...main.cpp|19|undefined reference to `DListIterator<Person>::go(int)'|
...main.cpp|20|undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <Person>(std::basic_ostream<char, std::char_traits<char> >&, DList<Person>&)'|
...main.cpp|21|undefined reference to `DList<Person>::~DList()'|
...main.cpp|21|undefined reference to `DList<Person>::~DList()'|
obj/Debug/main.o||In function `DList<Person>::insert(Person&)':|
...include/DList.h|45|undefined reference to `DList<Person>::insert(Person&, DListIterator<Person>&)'|
||=== Build finished: 5 errors, 0 warnings ===|
コマンド ラインで make を開始してビルドするか、Code::Blocks で Build 関数を使用してビルドするかに違いはありません。
すべてのコードを *.cpp ファイルから *.h ファイルにコピーしたとき、コンパイラはエラーを返さなかったので、リンカの問題だけだと思います。