07/09/10 19:58
Poggi Marco
Certamente è possibile aggiungere funzioni template ad una classe non template.
Nel tuo caso, il compialtore da errore perchè hai devinito una funzione void che non accetta parametri.
aaa
08/09/10 15:38
certo, avevo postato quella per semplicita,xD ma come vuoi :
ecco questa è la classe nel file header
class mouse : public point
{
public :
mouse();
....
template<class type> bool is_over(type);
private :
std::string mouseState;
bool leftClicked;
bool rightClicked;
};
e questa è l'implementazione nel file .cpp
template<class type>
bool mouse::is_over(type sprite)
{
if(this->getX() != 0 && this->getY() != 0)
if(this->getX() > sprite.getX() && this->getX() < sprite.getX()+sprite.getWidth()
&& this->getY() > sprite.getY() && this->getY() < sprite.getY()+sprite.getHeight())
return true;
else
return false;
}
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
class dinamic_sprite : public static_sprite
{
public :
dinamic_sprite();
void move();
........
protected :
mouse mouseClick;
};
invoco il metodo mouse::is_over(type) dal metodo move
void dinamic_sprite::move()
{
if(!(mouseClick.is_over<dinamic_sprite>(*this)))
{
...
}
}
il compilatore mi da come errore :
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
Ultima modifica effettuata da 08/09/10 16:09