Char** vers const char**

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 15 juin 2005 à 17:01
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 16 juin 2005 à 10:07
J'ai une erreur assez bizarre, sous VC++ 7.1. Ca compile avec l'option /TC (compilo C), mais pas /TP (compilo C++):



typedef struct _A

{

int nElements;

char** p;

} A;



int main()

{

A* a = 0;

const char** p = a->p; // erreur!

}



L'erreur trouvée est: error C2440: 'initialisation' : impossible de convertir de 'char ** ' en 'const char ** '

La conversion perd les qualificateurs



Si j'enlève le const pas de problème, mais moi je voudrais un const.

Normalement le problème devrait être pour passer de const char** à
char**, mais de char** à const char** je vois pas pourquoi ca marche pas

Ou alors ya quelque chose que je vois pas

Je pourrais m'en sortir en bidouillant un peu, c'est juste que je ne comprends pas ce message. Si quelqu'un comprend...
A voir également:

11 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
16 juin 2005 à 08:00
Faudrais revoir un cours sur pointeur & const, c'est important.

Vecchio56, tu veux un pointeur de pointeur constant et non un pointeur
de pointeur sur un truc constant ou un pointeur sur un pointeur
constant ?

Pour rappel:

const char *p est equivalent à char const * p (l'ordre du const n'est pas important par rapport au type).

Pour déclarer un pointeur constant le const doit etre placé aprés l'étoile (ou la derniere si pointeur de pointeur...).

const ptrptrchar est équivalent à char ** const.
3
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
15 juin 2005 à 17:17
salut,

n'y a t'il pas une ambiguité entre const (char**) et (const char*)* ?

(un pointeur constant vers un char*, et le 2e un pointeur vers un const char*)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 juin 2005 à 17:22
Je ne sais pas si c'est ca, mais je résous le problème de cette manière:



typedef char** ptrptrchar;



int main()

{

ptrptrchar p1;

const ptrptrchar p2 = p1;

}

Si tu as une solution sans le typedef
0
bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
15 juin 2005 à 17:29
est-ce que ca, ca t`irai?
char** p;
memcpy(p,a->p,sizeof(A));
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
15 juin 2005 à 17:30
typedef char** ptrptrchar;

int main()

{

char** p1;

const ptrptrchar p2 = p1;

}

ca marche aussi ...

a priori necessaire pour dire que le qualificatif const s'applique a
tout le type qui suit... (il doit tomber dans l'ambiguité (const
char*)* car la il pourrait pas garantir que ton pointeur pointe
toujours vers un const char* a la compilation)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 juin 2005 à 17:30
Bah non, j'ai pas envie de copier un truc que je ne vais pas modifier (c'est pour ca que je le veux en const d'ailleurs).
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
15 juin 2005 à 17:31
bou3 : ca planterait ce que tu proposes tu copies des trucs dans une zone memoire non initialisée
0
bou3 Messages postés 42 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 26 juin 2005
15 juin 2005 à 17:31
merde c vrai
desole :(
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
15 juin 2005 à 17:32
cosmobob, tu parles de (const char*)*. C'est juste pour qu'on
comprenne? Le compilo lui il veut pas voir ca... Selon toi le typedef
serait obligé?
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
15 juin 2005 à 20:16
le fait qu'il y ait ambiguité, et qu'au niveau de la syntaxe on puisse
pas déclarer un truc du genre (const char*)* permettrait du moins
d'expliquer que tu trouves pas comment faire sans le typedef
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 juin 2005 à 10:07
ha ben la voila la réponse ...
0
Rejoignez-nous