1

私のプロジェクトは、文字ごとの回文と単語ごとの回文をチェックする、ユーザー定義のリスト実装スタックとキューを作成するプログラムを C++ で作成することです。そのため、char 型と string 型をチェックするスタックとキューが必要になります。これは中級プログラミング (私の C++ シーケンスの 3 番目のコース) のプロジェクトであるため、STL のリスト/キュー/スタック オブジェクトを使用できず、テンプレートもまだ学習していません。しかし、文字列または文字入力用に別の実装を作成しなければならず、テンプレートを使用したいのは面倒だと思います。

すべてのコードが単一のファイルの下にある場合、プログラムは問題なく実行されます。クラスとその実装はすべて、私の main.cpp にあります。しかし、コードを分割して、クラス定義を list.h に、実装を list.cpp に配置し、ドライバー コードを main.cpp に保持しました。

実行すると、次のエラーが表示されます。

Error   1   error LNK2019: unresolved external symbol "public: void __thiscall  Stack<int>::push_front(int)" (?push_front@?$Stack@H@@QAEXH@Z) referenced in function _main  
Error   3   error LNK2019: unresolved external symbol "public: void __thiscall Queue<char>::push_back(char)" (?push_back@?$Queue@D@@QAEXD@Z) referenced in function _main   d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   2   error LNK2019: unresolved external symbol "public: int __thiscall Stack<int>::pop_front(void)" (?pop_front@?$Stack@H@@QAEHXZ) referenced in function _main  d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   4   error LNK2019: unresolved external symbol "public: char __thiscall Queue<char>::pop_back(void)" (?pop_back@?$Queue@D@@QAEDXZ) referenced in function _main  d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\DACUNTO_HW5P2_TEMP\main.obj  DACUNTO_HW5P2_TEMP
Error   5   error LNK1120: 4 unresolved externals   d:\my documents\visual studio 2012\Projects\DACUNTO_HW5P2_TEMP\Debug\DACUNTO_HW5P2_TEMP.exe 1   1   DACUNTO_HW5P2_TEMP

なぜこれが起こるのかはわかりませんが、すべてが 1 つのファイルの下にある場合、プログラムは正常に動作します。これが私のコードです:

main.cpp: http://pastebin.com/mQW4EV99

list.h: http://pastebin.com/Lze6jZv2

list.cpp: http://pastebin.com/7bks6Bt1

ありがとうございました

4

1 に答える 1

1

コンパイラは、テンプレートの定義が使用されている場所で見えることを望んでいます。

また:

  • 定義をクラス宣言に移動します (例: のコンストラクタに似ていますList) 。
  • または#include.cpp(そしてあなたの正気のためにその拡張子を変更してください)

テンプレートによってコンパイル時間が長くなる可能性があると聞くと、これが主な理由です。

于 2012-11-06T00:39:13.993 に答える