Aller au contenu

[RESOLU] C++ - Petit problème de typage


Shtong

Messages recommandés

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 :francais:

Lien vers le commentaire
Partager sur d’autres sites

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 :francais:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...