Bonjour,
j'ai un problème assez précis, et j'espere reussir a être assez clair.
Je développe une application (sous linux) en C++. Je souhaite développer pour celle-ci une gestion de plugins, par l'intermediaire de librairies externes (.so sous linux, dll sous windows). La particularité est que je souhaite que cette librairie contienne une classe c++ (et non pas de simples fonctions). Pour ce faire j'ai lu deux tutos :
http://hiko-seijuro.developpez.com/a...que-dynamique/
http://www.linux.com/howtos/C++-dlop...solution.shtml
J'ai compris les deux tutos. Seulement (mon manque de connaissance sur le polymorphisme y ai surement pour quelque chose). J'ai reproduit ces shémas pour mon appli.
J'ai une classe "plugin" qui contient (pour l'exemple) une méthode déclarée comme suis :
virtual string hello() const = 0 ;
et un attibut :
string monTest;
Dans ma classe dérivée, j'implémante hello() comme suis :
virtual string hello() const
{
return this->monTest;
}
je n'ai aucun souci. (je ne sais pas à quoi ser le const).
Mon souci est que dans cette fonction, "return this->monTest; " ne pose pas de problème; alors que si je fais "this->monTest" = toto, j'obtiens une erreur de compilation :
hello.cpp: In member function ‘virtual std::string Hello::hello() const’:
hello.cpp:7: erreur: passing ‘const std::string’ as ‘this’ argument of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]’ discards qualifiers
j'ai la meme chose si dans ma classe dérivée je déclare une méthode, et que j'essaie d'y accéder depuis hello().
Ma question pas très précise, est donc de savoir comment à partir d'une fonction virutelle(pure?), procede t'on pour mettre à jour des attributs de la classe parente, et de la classe dérivée, et comment fait on pour appeller une méthode membre.
J'espere ne pas m'ettre (vous avoir) trop perdu dans mes explications.
Merci d'avance pour vos réponses.
eponyme
Partager