[C++] conversion de 'this' de const en &
Résolu
KX
Messages postés
19031
Statut
Modérateur
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je suis en train de faire plusieurs classes pour rendre mon projet plus clair, notamment une classe template et je crois que c'est là que ça coince parce que j'ai une erreur que je n'arrive pas à résoudre...
Voici quelques extraits de mon code :
Je suis en train de faire plusieurs classes pour rendre mon projet plus clair, notamment une classe template et je crois que c'est là que ça coince parce que j'ai une erreur que je n'arrive pas à résoudre...
Voici quelques extraits de mon code :
int main() { index<stringM,3>dicoM; dicoM.push("bip"); } class stringM { std::string s; public: inline size_t size(void) { return s.size(); } }; template<typename stringX, size_t n> class index { std::list<stringX> t[n]; public: inline void push(const stringX s) { t[s.size()-1].push_back(s); // 'stringM::size' : impossible de convertir un pointeur 'this' de 'const stringM' en 'stringM &' } };Si vous pouviez m'aider à comprendre le problème, merci d'avance...
A voir également:
- [C++] conversion de 'this' de const en &
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Conversion bytes en mo - Forum Réseau
- Conversion mb en go ✓ - Forum Mail
- 2k€ conversion - Forum Logiciels
- MégaByte (MB) & GigaOctet (Go) ✓ - Forum Matériel & Système
6 réponses
Salut.
J'ai un peu de mal à voir l'erreur, mais ça ressemble fort à une erreur de const.
J'ai une méthode de programmation, qui n'est peut être pas très bonne, mais qui fonctionne assez bien pour moi, c'est d'éviter les const, les inline et les privates. C'est à dire de tout faire sans protection.
Si le code fonctionne bien, alors je les remet petit à petit pour avoir exactement ce que je cherche.
En plus, tu fait beaucoup de conversions implicites ce qui ne facilite pas les choses.
Un const derrière la définition de stringM::size pourrai peut être améliorer ton problème.
Mets nous le message complet du compilateur, on y verra un peu plus clair.
J'ai un peu de mal à voir l'erreur, mais ça ressemble fort à une erreur de const.
J'ai une méthode de programmation, qui n'est peut être pas très bonne, mais qui fonctionne assez bien pour moi, c'est d'éviter les const, les inline et les privates. C'est à dire de tout faire sans protection.
Si le code fonctionne bien, alors je les remet petit à petit pour avoir exactement ce que je cherche.
En plus, tu fait beaucoup de conversions implicites ce qui ne facilite pas les choses.
Un const derrière la définition de stringM::size pourrai peut être améliorer ton problème.
Mets nous le message complet du compilateur, on y verra un peu plus clair.
J'ai peut-être été incomplet dans ma distribution du code, j'ai aussi ceci :
// dans stringM.h stringM(const std::string); inline stringM(const stringM &s2) { s=s2.s; } // dans index.h inline void push(const std::string s) { stringX sX(s); push(sX); }
J'ai mis le message d'erreur de Visual Studio puis celui de Dev-C++ :
1>D:\...\index.h(55) : error C2662: 'stringM::size' : impossible de convertir un pointeur 'this' de 'const stringM' en 'stringM &' 1> La conversion perd les qualificateurs 1> D:\...\index.h(54) : lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu> 1> D:\...\test.cpp(12) : voir la référence à l'instanciation de la classe modèle 'index<stringX,n>' en cours de compilation 1> with 1> [ 1> stringX=stringM, 1> n=3 1> ]
D:\...\index.h In member function `void index<stringX, n>::push(stringX) [with stringX = stringM, unsigned int n = 3u]': 61 D:\...\index.h instantiated from `void index<stringX, n>::push(std::string) [with stringX = stringM, unsigned int n = 3u]' 13 D:\...\test.cpp instantiated from here 55 D:\...\index.h passing `const stringM' as `this' argument of `size_t stringM::size()' discards qualifiers
C'est ce que je te disait, essai :
Je ne garanti rien, mais il est possible que ça soit ça qui ne lui aille pas. Sinon, fait comme je t'ai dit dans le message précédent en virant les const.
PS:
D:\...\index.h(54) : lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu>
Trop pas douer Visual !
class stringM { std::string s; public: inline size_t size(void) const { return s.size(); } };
Je ne garanti rien, mais il est possible que ça soit ça qui ne lui aille pas. Sinon, fait comme je t'ai dit dans le message précédent en virant les const.
PS:
D:\...\index.h(54) : lors de la compilation de la fonction membre '<Inconnu>' de la classe <Inconnu>
Trop pas douer Visual !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci, ça marche !
Pour Visual j'avoue être un peu perdu, mais l'auto-complétion, et le débogueur pas à pas sont quand même très pratiques (dommage qu'il ne reconnaisse pas Qt)
Pour Visual j'avoue être un peu perdu, mais l'auto-complétion, et le débogueur pas à pas sont quand même très pratiques (dommage qu'il ne reconnaisse pas Qt)
ARG ! ce qu'il ne faut pas entendre. QtCreator est génial ! il fait aussi l'auto-completion et tout ça.
J'ai des problèmes avec le debugueur dans la version de base, c'est vrai, mais normalement, debuguer pas à pas, c'est possible dans tous les cas (bien fait sous devCpp)
J'envisageais même d'utiliser QtCreator comme IDE général mais si ce n'est pas son premier but que de ne pas faire de QT.
J'ai des problèmes avec le debugueur dans la version de base, c'est vrai, mais normalement, debuguer pas à pas, c'est possible dans tous les cas (bien fait sous devCpp)
J'envisageais même d'utiliser QtCreator comme IDE général mais si ce n'est pas son premier but que de ne pas faire de QT.