0

私は次のファイルを持っています:

listDriverTest.cpp
src/List.cpp
headers/List.h

List.cppに含めるのは

#include "../headers/List.h"

listDriverTest.cppに含めるのは

#include "headers/List.h"

次のステートメントでコンパイルすると、

g++ listDriverTest.cpp "src/List.cpp"

かなりの数の「未定義の参照」エラーが発生します。

listDriverTest.cpp:(.text+0x81): undefined reference to `List<int>::List()'
listDriverTest.cpp:(.text+0x8f): undefined reference to `List<int>::add(int)'
listDriverTest.cpp:(.text+0x9d): undefined reference to `List<int>::add(int)'
...

コンパイルが正しく機能するために、インクルードを適切に使用してこれら3つのファイルをコンパイルするにはどうすればよいですか?listDriverTest.cppをコンパイルして、同じディレクトリ内のすべてのファイルで正しく実行できるようにしましたが、このように分割された場合はそうではありません。

4

3 に答える 3

1

テンプレートクラスの子もテンプレートクラスである必要がありますか?の私の答えを参照してください。。

おそらく別の質問ですが、同じ答えが当てはまります。

于 2012-04-16T17:46:09.233 に答える
1

src / List.cppのコンパイルによって生成されたオブジェクトファイルにはすでに特殊化リストが含まれているように見えますが、listDriversTest.cppのオブジェクトファイルとは別のディレクトリにあります。したがって、リンカはそれを見つけることができません。

もちろん、これはテンプレートコードをどのように編成したかによって異なります。

于 2012-04-16T18:00:16.403 に答える
0

あなたのプログラムは私のマシンで正しくコンパイルされました。
src/List.cppの前後の二重引用符を削除するだけです。あなたの問題は別のものだと思います。

「list」を出力する関数voidlist(void)をlist.cppに追加しました。
同じ署名がlist.hに追加されました。

于 2012-04-16T17:50:51.760 に答える