Char** vers const char** [Résolu]

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
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...

11 réponses

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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*)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

est-ce que ca, ca t`irai?
char** p;
memcpy(p,a->p,sizeof(A));
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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).
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
bou3 : ca planterait ce que tu proposes tu copies des trucs dans une zone memoire non initialisée
Messages postés
42
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
26 juin 2005

merde c vrai
desole :(
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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é?
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
ha ben la voila la réponse ...