Problème con...

[Résolu]
Signaler
Messages postés
23
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
3 juin 2010
-
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010
-
Bonjour,

Comme vous allez le voir je débute en C++ et je suis face à un problème. Voici la fonction en question :

AWR_Shd_ShaderBase* AWR_Shd_ShaderList::Add_Shader (AWR_Shd_ShaderBase *Shader_Base)
{
    Shader_Base->AWR_Next_Shader = NULL;
    Current_Shader_List = (this->Last_Shader); // *
    Current_Shader_List->AWR_Next_Shader = Shader_Base;
    return Current_Shader_List;
}

A la compilation, sur la ligne avec l'étoile, le compilateur me sort une erreur : "class AWR_Shd_ShaderBase *(__thiscall AWR_Shd_ShaderList::*)(void)' ne peut pas etre converti en  'class AWR_Shd_ShaderBase *' "

Quelques explications s'imposent :
J'ai donc une classe AWR_Shd_ShaderList, qui est une suite simplement chainée de AWR_Shd_ShaderBase. Chaque élément de AWR_Shd_ShaderBase possède un pointeur (AWR_Next_Shader) sur le suivant. Current_Shader_List est le pointeur que j'utilise pour parcourir la liste et ne pas modifier le premier pointeur par erreur. Last_Shader renvoie un AWR_Shd_ShaderBase* sur le dernier élément de la liste. La fonction Add_Shader est donc pour ajouter un Shader à la fin de la liste.

Voyez-vous d'où vient le pb ? Merci bcp !

1 réponse

Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

plop ^^

pour info ton this->lastShader est de type "AWR_Shd_ShaderBase" si je pige bien et donc tu essaies d'affecter une variable de type "AWR_Shd_ShaderBase" à Current_Shader_List  qui est de type "AWR_Shd_ShaderList,", logique donc que ca ne passe pas vu qu'elles n'ont pas d'heritage en commun ni quoique ce soit.

la solution qui pourrait marcher serait la suivante : (  a tester tu me diras si ca marche)

AWR_Shd_ShaderBase* AWR_Shd_ShaderList::Add_Shader (AWR_Shd_ShaderBase *Shader_Base)
{
    Shader_Base->AWR_Next_Shader = NULL;
    this->Last_Shader->AWR_Next_Shader = Shader_Base;
    this->Last_Shader = Shader_Base;

 // je suppose que tu renvoies le derniere élément ajouté car sinon ta valeur de
 // retour n'etait pas cohérente avec la valeur de retour de ta fonction
    return Current_Shader_List->Shader_Base
}

Mess with the best, die like the rest