[C++] Template Probleem [is vast n00b]

Pagina: 1
Acties:

  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 13-09 14:36
grumbl... ben ik eindelijk lekker bezig met m'n prog bouwen in een IDE... krijg ik weer gezeur met templates:
code:
1
2
3
4
5
6
7
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
  ! Error: Unresolved external 'List<Terrain>::~List<Terrain>()' referenced f
*  rom TARGUI.OBJ
  ! Error: Unresolved external 'List<Terrain>::AddObject(Terrain *)' referenc
*  ed from TARGUI.OBJ
  ! Error: Unresolved external 'List<Terrain>::DeleteItem(int)' referenced fr
*  om TARGUI.OBJ

dit is m'n list:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//******************List Declaration***************************
#ifndef _LIST
#define _LIST
#include "ItemTemplate.h"
template <class I>
class List
{
    protected:
        Item<I>* itsHead;
        int itsLength;
    public:
    // constructors, NO COPY CONSTRUCTOR, NEVER PASS BY VALUE!!!
        List():itsHead(NULL),itsLength(0){}
        ~List();
    // operators
        Item<I>* operator[](int); //just like a normal array
    // accessors (need more???)
        int GetLength() { return itsLength; }
    // other member functions
        void AddObject(I* rhs);
        void DeleteItem(int); // deletes item[int x]
};
#endif          //_LIST

dat staat dus in ListTemplate.h, en dit wordt d'r vanuit targui.cpp gedaan:
code:
1
List<Terrain>* BaseTerrain = new List<Terrain>;

en daarna worden die functies uit de error nog aangeroepen... probleem zal dus wel zijn dat die list al tot .obj gecompiled wordt en daarna geen template meer kan zijn ofzo?
Ik ben nogal een c++ n00b, ik heb al door de helpfiles van m'n compiler gekeken, maar kan niet echt iets vinden waar ik iets van snap over dit spul. Dus als iemand me zou kunnen uitleggen hoe ik m'n template class aan de praat kan krijgen?

Only dead fish go with the flow


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Templates moet je definieren in de header, niet in een apart .cpp bestand.

  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 13-09 14:36
Op zondag 10 februari 2002 23:29 schreef Orphix het volgende:
Templates moet je definieren in de header, niet in een apart .cpp bestand.
Ummmmmmm wat bedoel je nou precies? :?

Only dead fish go with the flow


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Stel je gebruikt templates:
code:
1
List<Terrain> object;

Nu wil de compiler een klasse 'List<Terrain>' maken, daarvoor zoekt het de template List en vult voor elke 'T' in die template 'Terrain' in (ruw gezegd).
Dus je roept
object->AddObject(...) aan, de compiler gaat op zoek naar die functie om er een geparametriseerde (is dit c++?) versie van te maken. Maar wat blijkt, de definitie staat in in de header file maar in een ander bestand (waar de compiler geen weet van heeft), het resultaat is dat de functie niet gemaakt kan worden en dus niet gevonden kan worden.

De definities van je functies moeten dus in het header bestand staan, tezamen met de declaratie van je class.

  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 13-09 14:36
Het is idd c++.... maareh definities in een header file... dan is het hele principe van een headerfile toch weg?
Maareh, om dit te fixen moet ik dus de headerfile ook gelijk de .cpp laten includen? of gewoon zelf de .cpp includen waar ik ook de .h include?

Only dead fish go with the flow


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Template implementaties zet je over het algemeen in een *.inl (inline) bestand, wat je include vanuit de betreffende header file. Dit heeft van doen met dat je niet definieert maar een 'toekomstige implementatie' biedt, pas als je de template instantieert wordt er van de templatecode een definitie afgeleid.

(was dat te volgen? :) )

Professionele website nodig?


  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 13-09 14:36
wooha! het werkt!
bedankt
*D

Only dead fish go with the flow


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op maandag 11 februari 2002 13:50 schreef Toiletman het volgende:
Het is idd c++.... maareh definities in een header file... dan is het hele principe van een headerfile toch weg?
Maareh, om dit te fixen moet ik dus de headerfile ook gelijk de .cpp laten includen? of gewoon zelf de .cpp includen waar ik ook de .h include?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Op vrijdag 15 februari 2002 18:28 schreef MSalters het volgende:

[..]
Je mag ook wel een bericht typen hoor |:(
Pagina: 1