Avatar billede emmek Nybegynder
02. november 2002 - 10:14 Der er 12 kommentarer og
1 løsning

Linking problems using templates in in a linked list class

Hej!

Jeg har en linked list, som gerne skal laves med templates, så jeg ikke skal lave 117 kopier af den..

Jeg har lavet flg, som også kan kompileres, men under linkningen siger den:
/tmp/ccxCR5Za.o: In function `main':
/tmp/ccxCR5Za.o(.text+0x3e): undefined reference to `CFIFOQueue<int>::CFIFOQueue(int)'
/tmp/ccxCR5Za.o(.text+0x55): undefined reference to `CFIFOQueue<int>::~CFIFOQueue(void)'
/tmp/ccxCR5Za.o(.text+0x1f9): undefined reference to `CFIFOQueue<int>::~CFIFOQueue(void)'

OS er FreeBSD 4.7 STABLE
Ikke helt holdbart vel..
Egentlig er der også en Mutexwrapper klasse med, men den har jeg fjernet for ikke også at skulle poste koden for den også...
Jeg vil prøve og få en kopi af koden til at ligge på http://www.trillegaarden.cjb.net/coding/problem.html

Her er koden:

------------ test.cc ---------------
#include <iostream.h>
#include "CFIFOQueue.h"

int main()
{
    int *data = new int;
    *data = 1;
    CFIFOQueue< int > queueue(*data);

    cout << "\nProgram finishing\n";
    return 1;
}

------- CFIFOQueue.h -----------------------
#ifndef CFIFOQueue_h
#define CFIFOQueue_h

#include <assert.h>

//Forward declaration
template< class NODETYPE > class CFIFOQueue;

template<class NODETYPE>
class QueueNode
{
    friend class CFIFOQueue< NODETYPE >;    //Make CFIFOQueue a friend
public:
    QueueNode( NODETYPE *data );
    NODETYPE *getData();
private:
    NODETYPE *data;
    QueueNode< NODETYPE > *nextPtr;
};

template< class NODETYPE >
class CFIFOQueue
{
public:
    CFIFOQueue(int i);
    ~CFIFOQueue();

    bool    get(NODETYPE *data);
    void    put(NODETYPE *data);
    bool    isEmpty() const;

private:
    QueueNode< NODETYPE > *firstPtr;
    QueueNode< NODETYPE > *lastPtr;

    QueueNode< NODETYPE > *getNewNode( NODETYPE *data);
};
#endif


-------- CFIFOQueue.cc -----------------------------
#include <iostream.h>
#include "CFIFOQueue.h"


template<class NODETYPE>
QueueNode< NODETYPE >::QueueNode( NODETYPE *data )     { this->data = data; this->nextPtr = 0; }

template<class NODETYPE>
NODETYPE *QueueNode< NODETYPE >::getData()             { return this->data; }





template< class NODETYPE >
CFIFOQueue< NODETYPE >::CFIFOQueue(int i)
{
    this->firstPtr = this->lastPtr = 0;
    cout << "Constructor has been run..\n";

}


template< class NODETYPE >
CFIFOQueue< NODETYPE >::~CFIFOQueue()
{
    if(!this->isEmpty() )
    {
        cout << "Killing all nodes..\n";

        QueueNode< NODETYPE > *currentPtr = this->firstPtr, tempPtr;

        while(currenPtr != 0)
        {
            tempPtr = currentPtr;
            currentPtr = currentPtr->next;
            delete tempPtr;
        }
    }
    cout << "All entries destroyed..\n";
}


template< class NODETYPE >
void CFIFOQueue< NODETYPE >::put(NODETYPE *data)
{
    QueueNode< NODETYPE > *newPtr = this->getNewNode( data );

    if( this->isEmpty() )         this->firstPtr = this->lastPtr = newPtr;
    else
    {
        newPtr->nextPtr = this->firstPtr;
        this->firstPtr = newPtr;
    }
}



template< class NODETYPE >
bool CFIFOQueue< NODETYPE >::get(NODETYPE *data)
{
    bool succes;

    if( this->isEmpty() )         succes = 0;
    else
    {
        QueueNode< NODETYPE > *tempPtr = this->lastPtr;
        if(this->firstPtr == tempPtr)         this->firstPtr = this->lastPtr = 0;
        else
        {
            QueueNode< NODETYPE > *currentPtr = this->firstPtr;

            while(currenPtr->nextPtr != this->lastPtr)    currentPtr = currentPtr->next;

            this->lastPtr = currentPtr;
            this->lastPtr->nextPtr = 0;
        }
        data = tempPtr->data;
        succes = 1;
        delete tempPtr;
    }
    return succes;
}

template< class NODETYPE >
QueueNode< NODETYPE > *CFIFOQueue< NODETYPE >::getNewNode(NODETYPE *data)
{
    QueueNode< NODETYPE > *newPtr = new QueueNode< NODETYPE >( data );

    assert( newPtr != 0 );
    return newPtr;
}

template< class NODETYPE >
bool CFIFOQueue< NODETYPE >::isEmpty() const
{
    return (this->firstPtr == 0);
}
Avatar billede emmek Nybegynder
02. november 2002 - 10:18 #1
Vent lidt.. Der kommer ingen kopi på www.trillegaa.... Bare brug funktionen 'Vis fuld skærm' under funktioner ude til venstre..
Avatar billede soreno Praktikant
02. november 2002 - 10:27 #2
så vidt jeg husker skal al kode til en template være i samme fil (en .h fil).
Avatar billede emmek Nybegynder
02. november 2002 - 10:29 #3
Ka da egentlig godt ske.. Prøver lige ;o)
Avatar billede soreno Praktikant
02. november 2002 - 11:06 #4
det var jo egentlig et svar :-)
Avatar billede mickni33 Nybegynder
02. november 2002 - 11:15 #5
Soreno>>
du er bare suveræn.....
Ren nysgerrighed, hvad er dit job?
Avatar billede soreno Praktikant
02. november 2002 - 11:19 #6
jobsøgende datamatikerstuderende på 5. semester.. :-)
Avatar billede mickni33 Nybegynder
02. november 2002 - 11:22 #7
Har selv lige afsluttet datamatikerstudiet i juni..ingen jobs.
Så nu er jeg startet på Ingeniørstudiet istedet, der er det programmering, programmering og atter programmering systemudvikling er kun et valgfag :-).

Du er sku ved at indhente mig :-)
Avatar billede soreno Praktikant
02. november 2002 - 11:25 #8
jeg har også overvejet at læse videre, men jeg har ikke a-niveau i matematik så det begrænser mine muligheder :-(

jeg vil egentlig helst tjene nogle penge, men det er svært uden job.. ;-)
Avatar billede mickni33 Nybegynder
02. november 2002 - 11:29 #9
Jamen så tager du bare A i matematik på adgangskursus på enten DTU eller Ingeniørhøjskolen i Ballerup, jeg er på Adgangskursus netop nu
Mat A fys B Kemi C Dansk A. Så når man er færdig der så går man automatisk ud på den linie som man nu vælger, IT, svagstrøm, maskin eller hvad man nu vil.

Det er vildt fedt
Avatar billede soreno Praktikant
02. november 2002 - 11:51 #10
jeg tager muligvis et suppleringskursus til sommer så jeg kan gå igang med datalogi - hvis altså ikke jeg får job inden :-)
Avatar billede soepro Nybegynder
08. november 2002 - 14:14 #11
Hvordan kan 0 snakke med 0 og så hedde Soreno engang imellem ? Jeg er bare nysgerrig !
Avatar billede soreno Praktikant
08. november 2002 - 14:24 #12
der var et bug i ekspertens database i søndags eller mandags (tror jeg det var). Det var ikke muligt at logge ind, samt alle brugernavne var "0" - det er åbenbart endnu ikke rettet alle stedet.
Avatar billede soreno Praktikant
08. november 2002 - 14:28 #13
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester