Shtong Posté(e) le 23 avril 2010 Partager Posté(e) le 23 avril 2010 Hello tous Je me remet au C++ après de longues années d'absence, et je ne rencontre pas de problème particulier sauf un (ça serait trop facile sinon). Pour résumer, j'ai l'impression que le compilateur transforme une variable string et basic_string, ce qui n'est pas incorrect en soi sauf que du coup il refuse d'appeler des méthodes qui prennent des string en paramètre. Par exemple (j'ai nettoyé le code pour ne montrer que l'essentiel de ce qui nous intéresse ici) : // localNodeConfiguration.cxx #include <string> #include "configurationManager.hxx" using namespace std; namespace OmegaNoc { LocalNodeConfiguration *LocalNodeConfiguration::ReadFromFile(string & path) { // ... L'erreur concerne cette ligne : throw configuration_file_error(string("Configuration file empty"), path); // ... } } La déclaration de mon configuration_file_error : // configurationManager.hxx #include <string> using namespace std; namespace OmegaNoc { class configuration_file_error: public configuration_error { public: configuration_file_error(string & what, string & fileName): configuration_error(fileName) { } }; } Voilà. Donc l'objectif c'est bien d'appeler le constructeur de configuration_file_error qui prends en paramètre string et string, et je lui passe en paramètre string et string. Bon. Mais non, car le compilateur me sort ceci : /usr/bin/g++ -g -I/home/shtong/Dev/OmegaNoc/build -I/usr/share/include/boost-1.41.0 -o CMakeFiles/OmegaNocInternals.dir/configuration/localNodeConfiguration.cxx.o -c /home/shtong/Dev/OmegaNoc/source/configuration/localNodeConfiguration.cxx .../localNodeConfiguration.cxx: In static member function ‘static OmegaNoc::LocalNodeConfiguration* OmegaNoc::LocalNodeConfiguration::ReadFromFile(std::string&)’: .../localNodeConfiguration.cxx:73: error: no matching function for call to ‘OmegaNoc::configuration_file_error::configuration_file_error(std::string, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’ .../configurationManager.hxx:25: note: candidates are: OmegaNoc::configuration_file_error::configuration_file_error(std::string&, std::string&) .../configurationManager.hxx:22: note: OmegaNoc::configuration_file_error::configuration_file_error(const OmegaNoc::configuration_file_error&) POURQUOIIIII Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
IFRIC4 Posté(e) le 23 avril 2010 Partager Posté(e) le 23 avril 2010 Bonjour, peux-tu mettre les lignes de codes où path est utilisé avant l'appel ? throw configuration_file_error(string("Configuration file empty"), path); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 23 avril 2010 Auteur Partager Posté(e) le 23 avril 2010 Bonjour,peux-tu mettre les lignes de codes où path est utilisé avant l'appel ? throw configuration_file_error(string("Configuration file empty"), path); Elle n'était jamais utilisée (pour l'instant, c'est en cours de développement) De toute façon l'utilisation à priori ne pose pas problème puisque la variable ne change pas de type en cours de route, elle reste telle qu'on l'a déclarée ! ----------------------- Mais bref, je viens de corriger le problème, qui en fait n'avait rien à voir avec ce que me disais le compilateur... La signature de mon constructeur était incorrecte, et il fallait mettre les paramètres en const : configuration_file_error(const string & what, const string & fileName): configuration_error(fileName) { } Ceci afin que le compilateur puisse lui passer la référence que je ne lui passait pas (en fait je lui envoyais une valeur et pas une référence...) En gros j'ai été piégé par le message d'erreur qui m'a suggéré une piste complètement à coté de la plaque... Merci à tous Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.