0

したがって、.csvクラス User からのユーザーを作成しているファイルから。すべてのユーザーを含むリンクリストを作成しようとしていますが、「ListaLigada」という名前のリンクリストにユーザーを挿入するとエラーが発生します。私は自分でそれを理解することはできません。

だから、これは私が得ているものです:

エラー 1 エラー LNK2019: 未解決の外部シンボル "public: void __thiscall ListaLigada::insert(class User)" (?insert@?$ListaLigada@VUser@@@@QAEXVUser@@@Z) 関数 "void __cdecl genUserLList(class ListaLigada &)" (?genUserLList@@YAXAAV?$ListaLigada@VUser@@@@@Z) C:\Users\Daniel\documents\visual studio 2010\Projects\Radio Station\Radio Station\Auxf.obj Radio Station

私が間違っていることを特定できれば、感謝します.2日が経ちました.

関連するコードは次のとおりです。

ListaLigada.h

    #pragma once
    #ifndef ListaLigada_H
    #define ListaLigada_H

    #include <cstddef>
    #include <cassert>

    template<class T>
    class ListaLigada
    {
    public:
        ListaLigada();
        ListaLigada(T elem);
        ~ListaLigada(void);

            void insert(T elem);
        void remElem(T elem);
        void remElem(int id_elem);
        void searchElem(int id_elem);
        void searchElem(T elem);
        void clear();

    private:
        struct Node{
            T data;
            Node *next;
            Node *prev;
        } *p;

        size_t list_size;
    };


    #endif

ListaLigada.cpp

    #include "ListaLigada.h"
    template<class T>
    ListaLigada<T>::ListaLigada()
    {
        list_size=0;
        this->p=new Node;
        this->p=NULL;
    }

    template<class T>
    ListaLigada<T>::~ListaLigada(void)
    {
        clear();
    }

    template<class T>
    ListaLigada<T>::ListaLigada(T elem)
    {
        node *q, *t;
        if(p == NULL)
        {
            p=new Node;
            p->data= elem;
            p->next= Null;
            list_size++;
        }
        else
        {
            q=p;
            while(q->next!= NULL)
                q= q->next;
            t= new node;
            t->data= elem;
            t->next=Null;
            t->prev=q;
            q->next=t;
            list_size++;
        }
    }

    template <class T>
    void ListaLigada<T>::insert(T elem)
    {
        node *q, *t;
        if(p == NULL)
        {
            p=new Node;
            p->data= elem;
            p->next= NULL;
            list_size++;
        }
        else
        {
            q=p;
            while(q->next!= NULL)
                q= q->next;
            t= new node;
            t->data= elem;
            t->next=NULL;
            t->prev=q;
            q->next=t;
            list_size++;
        }
    }

    template <class T>
    void ListaLigada<T>::remElem(T elem)
    {
        node *q, *t;
        if(p== NULL)
        {
            system("cls");
            cout<<"There's nothing to remove\n";
            _getch();   
        }
        else
        {
            q=p;
            while(q->next != NULL){
                //e se for o unico elemento?
                if(list_size==1)
                {
                    ~ListaLigada();
                //blahblah limpar ficheiros
                    break;
                }
                else
                {
                    if(q->data.getId() == )
                }

            }
        }

    }

    template <class T>
    void ListaLigada<T>::remElem(int id_elem){}

    template <class T>
    void ListaLigada<T>::searchElem(int id_elem){}

    template <class T>
    void ListaLigada<T>::searchElem(T elem){}

    // deletes all the list elements
    template <class T>
    void ListaLigada<T>::clear()
    {
    node *q;
    if( p == NULL )
    return;
    while( p != NULL )
    {
    q = p->next;
    delete p;
    p = q;
    listSize--;
    }
    //assert(listSize==0);
    }

auxf.h

#ifndef AUX_H
#define AUX_H

//#include "includes.h"
#include "ListaLigada.h"
#include "Music.h"
#include "User.h"
#include "RadioStation.h"
#include <conio.h>
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <list>

#define MIN_LEN 2

bool strMinLen(string str, int min_len);
void fillField(string &to_fill, const string &what_is);
void checkFiles();
void loadInfo(vector<int> &vec); //carrega ids maximos
void regUser();
void addMusic();
void updateRestoreTxt(const int &line);
void loadRestore();
void updateRestore();
//void genUserLList(list<User> &lista);
void genUserLList(ListaLigada<User>);


#endif

auxf.cpp //関連する関数のみを投稿します

void genUserLList(ListaLigada<User> &lista){
    ifstream ifs;
    ifs.open("users.csv");
    if(ifs){
        int to_read;
        to_read=getNUsers(); //nr of users to read


        string user_line;
        getline(ifs, user_line, ','); //linha cabecalho
        for(int i=0; i<to_read; i++){

            user_line.clear();

            string name, password;
            int age;
            char gender;
            unsigned int id=0;

            getline(ifs, user_line);

            stringstream sstream;
            sstream<<user_line;
            string tmp;
            stringstream sstmp;
            char delim= ',';

            getline(sstream, tmp, delim);
            sstmp<<tmp;
            sstmp>>id;
            sstmp.clear();
            tmp.clear();

            getline(sstream, name, ',');

            getline(sstream, tmp, ',');
            sstmp<<tmp;
            sstmp>>age;
            sstmp.clear();
            tmp.clear();

            getline(sstream, tmp, ',');
            sstmp<<tmp;
            sstmp>>gender;
            sstmp.clear();
            tmp.clear();

            getline(sstream, password, ',');

            User n_user(id, name, age, gender, password);
            /*list<User>::iterator it;
            it=lista.end();
*/
            lista.insert(n_user);
        }
    }
    else{
        cout<<"Lista Ligada ta fdd\n";
        _getch();
    }
}

前もって感謝します。もうどうしたらいいのかわからない… ユーザーの声を読んでいる

4

2 に答える 2

5

テンプレート化されたクラスを使用する場合、完全な定義が必要であり、それにはすべてのメソッドも含まれます。したがって、テンプレート化されたクラスをヘッダーとソース ファイルに分割することはできません。すべてをヘッダー ファイルに含める必要があります。

于 2013-05-27T14:07:54.547 に答える
0

テンプレートクラスを他のコンパイルユニットに実装することはできません。それを使用したいです。

すべてをヘッダーで行うか、この実装をヘッダーに含めて読みやすくする必要があります。

その理由は、使用時に特殊なテンプレート クラスのコードが生成されるためです。テンプレートクラスのよく知られた特殊化のみを使用したい場合は、ヘッダーから分離された実装を使用して、それらの特殊化を強制的に作成できます。

テンプレートはヘッダー ファイルにしか実装できないのはなぜですか?

于 2013-05-27T14:08:33.173 に答える