Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
type deve essere una delle classi che ho creato io con questa gerarchia
-class point {}
-class static_sprite : public point { }
-class dinamic_sprite : public static_sprite { }
quando dalla classe dinamic_sprite
Codice sorgente - presumibilmente C++
class dinamic_sprite :public static_sprite
{
public:
dinamic_sprite();
void move();
........
protected:
mouse mouseClick;
};
invoco il metodo mouse::is_over(type) dal metodo move
Codice sorgente - presumibilmente C/C++
void dinamic_sprite::move()
{
if(!(mouseClick.is_over<dinamic_sprite>(*this)))
{
...
}
}
il compilatore mi da come errore :
Codice sorgente - presumibilmente C/C++
error LNK2019: riferimento al simbolo esterno "public: bool __thiscall mouse::is_over<class dinamic_sprite>(class dinamic_sprite)" (??$is_over@Vdinamic_sprite@@@mouse@@QAE_NVdinamic_sprite@@@Z) non risolto nella funzione "public: void __thiscall dinamic_sprite::move(void)" (?move@dinamic_sprite@@QAEXXZ)
fatal error LNK1120: 1 esterni non risolti
l'esperienza mi ha insegnato che l'implementazione di template è la parte più "cessa" di tutti i compilatori C++ attuali.
Prova a spostare l'implementazione del metodo direttamente nel file header. Se ancora non funziona, rendi templata l'intera classe. Una terza via sarebbe quella di creare una funzione statica (cioè fuori da ogni classe) che prende in input due parametri: