Vu que je me suis enfin lancé dans une appli pratique en C++, je risque de
venir vous déranger assez souvent dans l'avenir immédiat...
Voici, donc, ma question du jour :
int* Matrix::GetClosure() const
{
if (closure == 0) CalcClosure();
int* buff = new int[dim*dim];
memcpy(buff, closure, dim*dim*sizeof(int));
return buff;
}
Je veux calculer la fermeture transitive d'une matrice et stocker le
résultat pour ne pas avoir à refaire le calcul lors d'un second appel. Mon
idée est donc d'initialiser dans mon instance de Matrix, un pointeur
'closure' à 0.
La fonction GetClosure étant 'const', elle ne modifie pas ce pointeur :
c'est la fonction CalcClosure qui le fait, après avoir créé le tableau de
nombres voulu (la méthodologie est peut-être discutable, comme toute
méthodologie, mais ma question ne porte pas sur ce point...).
Là où le bât blesse, c'est que le compilateur tique sur la ligne 'if...' et
m'envoie le message :
error C2662: 'CalcClosure' : cannot convert 'this' pointer from 'const class
Matrix' to 'class Matrix &'
Je ne comprends pas cette erreur. Pourquoi ne puis-je appeler la fonction
membre CalcClosure, alors que faire référence au membre 'dim' 2 lignes en
dessous ne pose aucun problème ?!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
"Jean-Noël Mégoz" writes:
Je ne comprends pas cette erreur. Pourquoi ne puis-je appeler la fonction membre CalcClosure, alors que faire référence au membre 'dim' 2 lignes en dessous ne pose aucun problème ?!
Parce que CalcClosure n'est pas const mais GetClosure l'est et ne peux donc que lire des membres et appeler des membres const.
Solution, rendre closure mutable (mettre mutable devant sa declaration) et GetClosure const. Les membres mutables sont concus justement pour ce probleme: permettre de garder const des fonctions membres qui le sont logiquement mais modifient un membre pour des raisons diverses.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Je ne comprends pas cette erreur. Pourquoi ne puis-je appeler la fonction
membre CalcClosure, alors que faire référence au membre 'dim' 2 lignes en
dessous ne pose aucun problème ?!
Parce que CalcClosure n'est pas const mais GetClosure l'est et ne peux
donc que lire des membres et appeler des membres const.
Solution, rendre closure mutable (mettre mutable devant sa
declaration) et GetClosure const. Les membres mutables sont concus
justement pour ce probleme: permettre de garder const des fonctions
membres qui le sont logiquement mais modifient un membre pour des
raisons diverses.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Je ne comprends pas cette erreur. Pourquoi ne puis-je appeler la fonction membre CalcClosure, alors que faire référence au membre 'dim' 2 lignes en dessous ne pose aucun problème ?!
Parce que CalcClosure n'est pas const mais GetClosure l'est et ne peux donc que lire des membres et appeler des membres const.
Solution, rendre closure mutable (mettre mutable devant sa declaration) et GetClosure const. Les membres mutables sont concus justement pour ce probleme: permettre de garder const des fonctions membres qui le sont logiquement mais modifient un membre pour des raisons diverses.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Noël Mégoz
"Jean-Marc Bourguet" a écrit dans le message de news:
"Jean-Noël Mégoz" writes:
Parce que CalcClosure n'est pas const mais GetClosure l'est et ne peux donc que lire des membres et appeler des membres const.
Ok, c'est la nécessité d'appeler des membres const qui m'avait échappé.
Merci.
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de
news:pxbbrl3gcvo.fsf@news.bourguet.org...