0

重複の可能性:
テンプレートをヘッダー ファイルにしか実装できないのはなぜですか?

メインクラス

   int main() {
      initCarList();
   }

   void initCarList() {
        List<Car> carList;
        Car c1 = Car("Toyota", "Bettle", 5);
        carList.add(c1);
        Car c2 = Car("Mercedes", "Bettle", 7);
        carList.add(c2);
        Car c3 = Car("FireTruck", "Large Van", 20);
        carList.add(c3);
        Car c4 = Car("Puma", "Saloon Car", 10);
        carList.add(c4);
    }

リストクラス

#include "List.h"
#include <iostream>

using namespace std;

template <typename ItemType>
class List {
private:
    ItemType itemList[10];
    int size;
public: 
    List();
    void add(ItemType);
    void del(int index);
    bool isEmpty();
    ItemType get(int);
    int length();
};

template<typename ItemType>
List<ItemType>::List() {
    size = 0;
}

template<typename ItemType>
void List<ItemType>::add(ItemType item) {
    if(size < MAX_SIZE) {
        itemList[size] = item;
        size++; 
    } else {
        cout << typename << " list is full.\n";
    }
}

これらのようなエラーが発生しました

エラー 3 エラー LNK2019: 未解決の外部シンボル "public: void __thiscall List::add(class Car)" (?add@?$List@VCar@@@@QAEXVCar@@@Z) 関数で参照されている "void __cdecl initCarList(void )" (?initCarList@@YAXXZ) C:\Users\USER\Desktop\New folder\DSA_Assignment\main.obj DSA_Assignment

コードで何か間違ったことをしましたか? 助けが必要ですありがとう!

4

2 に答える 2

0

それが機能しないので、明らかにあなたはしました!ちらつきはさておき、エラーメッセージを少しずつ見てみましょう。

Error 3 error LNK2019: unresolved external symbol

したがって、これはリンケージエラーです。リンカは、個別にコンパイルされたユニットをまとめようとしていますが、この場合、external symbol通常は関数名または変数名が見つかりません。

"public: void __thiscall List::add(class Worker)" (?add@?$List@VWorker@@@@QAEXVWorker@@@Z)

これは、欠落している関数の完全な署名です。残念ながら名前は管理されていますが、作成しているコードのコンテキスト知識があれば、次のように判断できるはずです。

void List::add(Worker)

次のビット...

referenced in function "void __cdecl initWorkerList(void)" (?initWorkerList@@YAXXZ) C:\Users\USER\Desktop\New folder\DSA_Assignment\main.obj DSA_Assignment

...は、問題が発生している場所、つまり、リンクしようとしているコードのどこに、欠落している関数への参照があるかを示しています。繰り返しますが、デマングルした後は次のようになります。

void initWorkerList()

ご覧のとおり、少し移植することで、ここで何を間違えたかを正確に判断できます。お役に立てれば。

于 2013-01-08T11:54:19.527 に答える
0

コードに構文エラー ( cout << typename) があります。リンカーエラーがどのように発生したかわかりません。まったくコンパイルされていない可能性があります。

そうでなければ大丈夫http://ideone.com/PGWGZu

于 2013-01-08T11:53:38.760 に答える