Bonjour, j’ai une fonction template (un peu old school mais j’ai pas la choix) qui me cherche un maximun dans un voisinage de 9 (j’ai simplifié).
A la compilation (borland builder 6) j’ai un joli message d’erreur me disant impossible de modifier un objet constante…
//Maxi 3x3
template<class T>
void maxi(T *ptr)
{
T m=*ptr;
if (m<*(ptr-1)) m=*(ptr-1); //L'erreur est là
if (m<*(ptr+1)) m=*(ptr+1);
return m
}
Mon T est de type const(obligé), c’est ça qui fous tout en l’air.
Y a t’il une solution pour déclarer la variable m en non const?
Question conne : tu peux renvoyer un pointeur sur l’objet T? Sinon, faut passer par les const_cast (je sais pas si ça fera l’affaire)
Sinon, j’ai des doutes quant à une fonction renvoyant un objet m, et étant déclarée void
Dans l’exemple que j’ai donné je pourrais renvoyer un pointeur mais j’ai d’autres fonctions du même type qui font des opérations avant de renvoyer une valeur.
Const_cast > j’essaie
Arf le probleme du const_cast c’est qu’il lui faut un type de destination, or celui que je veut c’est le type T mais pas const :pt1cable:
const_cast<<type>>(<value>);
Sinon je pourrai peut être passer à ma fonction un parametre "fake" de type T (pas const).
tu l’utilises comment la fonction (ça fait longtemps que j’ai pas fait de c++)
J’ai résolu mon pb comme ça:
template <class T,class X>
T maxi(T *ptr, X truc_bidon)
{
X m;
m=*ptr;
m=(m>*(ptr+nx))?m:*(ptr+nx);
m=(m>*(ptr-nx))?m:*(ptr-nx);
return m;
}
void fonction_appelante(Timg<T>**in)
{
T const*const* dataIn=in[0]->const_loadAll(); //ici j'ai pas le choix
T fake;
T const*ptr2= dataIn[20];
maxi(ptr2,fake);
}
Bricolage, quand tu nous tiens…