0

楽しみと復習のために二重リンクリストを実装していて、メイン関数でそのインスタンスを宣言しようとすると、奇妙なリンカーエラーが発生します。

エラーは次のとおりです。

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall 
d_list<int>::d_list<int>(void)" (??0?$d_list@H@@QAE@XZ) referenced in function _main
1>c:\users\ben\documents\visual studio 2010\Projects\dlist\Debug\dlist.exe : fatal 
error LNK1120: 1 unresolved externals

main.cppは次のとおりです。

#include "d_list.h"

int main(){

    d_list<int> test;

    return 0;
}

構造自体は未完成ですが、必要な場合に備えてここにコードを貼り付けます。

ヘッダーファイル:

#ifndef D_LIST_H
#define D_LIST_H

template <class T>
class d_list{
public:
    d_list();
    d_list(const d_list &_dl);

    void push_back(T item);
    void push_front(T item);

    void pop_back();
    void pop_front();

private:
    struct node{
            node *prev; 
        node *next;
        T    data;
    };
    node *head;
    node *tail;
        int   size;
};

#endif //D_LIST_H

d_list.cpp:

#include "d_list.h"

template <class T>
d_list<T>::d_list(){
}

template <class T>
d_list<T>::d_list(const d_list<T> &_dl){

}

template <class T>
void d_list<T>::push_back(T item){
    node *new_tail = new node;
    new_tail->data = item;
    new_tail->next = head;
    new_tail->prev = tail;
    tail->next = new_tail;
    size++;
}

template <class T>
void d_list<T>::push_front(T item){
    node *new_head = new node;
    new_head->data = item;
    new_head->prev = tail;
    new_head->next = head;
    head->prev = new_head;
        size++;
}

template <class T>
void d_list<T>::pop_back(){
    node *temp = tail->prev;
    temp->next = head;
    delete tail;
    tail = temp;
        temp = NULL;
}

template <class T>
void d_list<T>::pop_front(){

}
4

1 に答える 1

3

テンプレートとその実装は、ヘッダーファイルで定義する必要があります。これらはオンデマンドでコンパイルされるため、通常の関数またはクラスではありません。.cppを削除し、すべての実装をヘッダーファイルに配置してみてください

于 2012-04-23T02:39:01.913 に答える