Bonjour!
Après avoir relu les tutoriels du site, je n'ai pas trouvé de réponse. J'espère cependant ne pas poser une question idiote :p.
J'essaye de travailler sur une structure déclarée et définie dans une librairie dynamique (.so) par offset et pointeurs dans le programme "appelant", ce qui m'amène à un warning de g++. Le code est fonctionnel, mais pourriez vous m'indiquer une méthode équivalente qui ne fasse pas crier g++?
Ce que je fais est équivalent à:
la structure (.h):
le bout de code (.cpp)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct { float a; float b; }dumbStruct;
Sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void * ptr; dumbStruct Struc; Struc.a = 1; Struc.b = 2; ptr = &Struc; cout << "a :" << *(float*)ptr << "\n"; cout << "b :" << *(float*)(ptr + sizeof(float)) << "\n\n";
La sortie est donc bonne, mais j'ai un warning de la forme:a :1
b :2
Ok, donc il n'aime pas qu'on fasse de l'arithmétique avec un void *.....attention : pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
Les casts sont simplement pour provoquer le warning (je pourrais ici juste déclarer le pointeur en float, ou enlever les parenthèses du cast, mais ça ne traduirait pas mon vrai soucis de ne pas connaitre le type du pointeur). En réalité, je dispose uniquement d'un pointeur void sur la structure, et d'un vector de strings contenant le type de toutes les variables (je peut donc gérer les offsets avec sizeof() qui accepte des strings en entrée). Je ne peut pas déclarer ou caster le pointeur dans le bon type pour éviter de travailler sur un void (enfin pas à ma maigre connaissance).
Pourriez-vous me proposer une alternative "propre" s'il vous plait? ( et donc qui ne fait pas pleurer gcc?)
Un grand merci d'avance!
Partager