Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template-Klassen-Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.01.2006, 17:08 Uhr
~Pomplito
Gast


Hallo,

ich versuche gerade einmal eine Template-Klasse zu entwerfen und habe es dann auch endlich geschafft, nur gibt
es bei der weiteren Implementierung ein Problem mit dem Linker und ich weiß nicht woran das liegt. Ich hoffe
ihr könnt mir da weiter helfen!

Zuerst einmal kommt hier der das Problem betreffene Teil der Template-Klasse. Diese Klasse ist übrigens fertig implementiert und alles wird korrekt kompiliert, etc. Die Klasse CVector wird dabei vorausgesetzt, die ist hier nicht von Interesse!


C++:
template <class TYPE> class CCellularAutomata
{
public:
    TYPE    getCellState( CVector vecCellPos );
    virtual TYPE translateCell( CVector vecCellPos ) = 0;
}


template<class TYPE> TYPE CCellularAutomata<TYPE>::getCellState( CVector vecCellPos )
{
    uint32    intOffset = 0;
    uint32    intFactor = 1;

    for (uint32 intCounter=0; intCounter<vecCellPos.getDimension(); intCounter++)
    {
        intOffset += (vecCellPos.getItem(intCounter) % intSize) * intSize;
        intFactor *= intSize;
    }

    if (intOffset < intCellCount)    return fooCell[intOffset];
    return NULL;
}




Jetzt habe ich hier noch die Implemtierung der abstrakten Funktion translateCell in einer Subklasse!


C++:
class CShrinkAutomata : public CCellularAutomata<strucCell>
{
public:    
    strucCell translateCell(  CVector vecCellPos );
};



Hierbei ist strucCell eine einfache Struktur, die z.B. folgendermaßen definiert sein könnte:


C++:
struct strucCell
{
    int    intColor;
    double    dblIrgendwas;
};



Soweit so gut, versuche ich jetzt aber die Funktion aus CShrinkAutomata zu implementieren, so gibt es ein Problem!


C++:
strucCell    CShrinkAutomata::translateCell( CVector vecCellPos )
{
    /* strucCell    oldCell = getCellState( vecCellPos ); */
    strucCell    newCell;
    return         newCell;
}



Bis jetzt kompiliert und linkt der Compiler alles, aber wenn ich hier die auskommentierte Zeile hereinnehme, dann bricht der Compiler mit folgender Fehlermeldung ab:
shrink.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: struct strucCell __thiscall CCellularAutomata<struct strucCell>::getCellState(class CVector)" (?getCellState@?$CCellularAutomata@UstrucCell@@@@QAE?AUstrucCell@@VCVector@@@Z)
Debug/QueenBee.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

Habe ich irgendwas falsch gemacht oder etwas übersehen?


Pomplito


Bearbeitung von ao:
cpp- und code-Tags bitte klein schreiben, CPP und CODE funktioniert nicht.
Gruß,
ao

Dieser Post wurde am 30.01.2006 um 19:24 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.01.2006, 19:16 Uhr
(un)wissender
Niveauwart


Hm, mit VC 7 und gcc 3.x funzt das super. Womit machst dues den?
Versuch ansonsten man ein this->getCellState( vecCellPos ).
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.01.2006, 19:44 Uhr
ao

(Operator)


Der Fehlertext sieht nach VC6 aus.

Pomplito, hast du mal versucht, die Implementierung von getCellState innerhalb der Klassendefinition zu machen? Also so:


C++:
template <class TYPE> class CCellularAutomata
{
public:
    TYPE    getCellState( CVector vecCellPos )
    {
        uint32    intOffset = 0;
        uint32    intFactor = 1;

        ....

    }
    
    virtual TYPE translateCell( CVector vecCellPos ) = 0;
}


Wobei mir nicht so ganz klar ist, wie das mit dem "return NULL"-Statement klappen soll, du musst doch ein TYPE, also in diesem Fall ein strucCell, zurückgeben und keinen Zeiger auf irgendwas.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: