Vous n'êtes pas identifié.
Voila, g 1 chti probleme.
Je vous balance le code, apres on en parle:
struct TypeBmp
{
int hauteur;
int largeur;
int largeur_byte;
byte *bitmap;
byte bitmap2[8192];
~TypeBmp()
{
free(bitmap);
}
TypeBmp(char* path)
{
load_bmp(path);
}
...
Et plus loin un appel explicite au destructeur:
fgp.~TypeBmp();
"fgp" étant une instance de TypeBmp (je précise aussi que fgp n'est pas un pointeur (donc le " . " se justifie).
Alors voila mon problème: la compilation de ce code sous TC3.00 génère un charmant message d'erreur "Member identifier expected", autrement dit, ~TypeBmp() n'est pas membre de TypeBmp (précision: struct <=> tt public dc pas de problème de restrictions d'accès).
Donc:
1) prévenez moi s'il y a (on ne sait jamais) une GROSSE connerie ds le code ce dessus que je n'aurais pas vu (ca m'arrive ... )
2) Si apparamment tt est correct, essayez de compiler chez vous (si vous avez TC3.00 un chti prog avec une classe (struct) et un destructeur.
Essayez d'appeler explicitement le destructeurs et communiquez moi les résultats.
Voila. Je vous remercie d'avance !!
;-)
Hors ligne
désolé je m'y connaît pas bien du tout en langage objet, mais tu devrais avoir plusieurs compilateur installés, comme gcc par exemple (entièrement gratuit) un des meilleur !
Hors ligne
Essai de modifier :
~TypeBmp()
{
free(bitmap);
}
en :
DestrBmp()
{
free(bitmap);
}
Peut être que le ~ veut dire autre chose qu'un caractere en C, non ?
Hors ligne
en effet le "~" est l'équivqlent de la commande "not"en asm (c'est le complément), par exemple : ~(01100010) == 10011101
@+
Hors ligne
moi je n'y connais rien en C++, mais je suis d'accord avec 2072, le tilde signifie bien not en C/C++
@+
Hors ligne
le ~ signifie effectivement NOT (binaire) mais c'est aussi le préfixe qui identifie un destructeur de classe en C++.
Un destructeur se définit dans une classe sous cette forme:
~Nom_de_la_classe(parametres) { instructions;}
sans Void ni aucune valeur de retour.
Superna ton truc ca ne peut pas marcher étant donné que cela ne désallouerait que bitmap. Or un destructeur détruit TOUTE l'instance de la classe, autrement dit, tous les membres non dynamiques (c'est pourquoi le destructeur doit être explicite: il faut aussi désallouer les membres dynamiques sans quoi la mémoire se chargerait vite !!).
Je vous cite un extrait du Langage C++ paru chez Micro Application dans la collection Grand Livre :
De même que les constructeurs, les destructeurs peuvent s'appeler explicitement. [...] L'appel explicite d'un destructeur, à la différence d'un constructeur, doit contenir un objet ou un pointeur sur un objet. Autrement dit, pour une classe K, la forme sera : objet.~K() ou pointeur->~K() .
Donc finalement je ne suis pas bien avancé. Enfin bon je saurais me débrouiller sans ca: de toute facon, le destructeur est appelé implicitement lorsque l'objet sort de son domaine de validité.
Sinon une petite question à part:
Ca m'étonne que vous ne connaissiez pas le C++ ... Pourquoi ?
Moi, c simple, je ne peux plus m'en passer ! LEs programmes sont tellement plus organisés !
Et sinon, à la compilation, ya une différence de taille entre un prog en C et le même en C++ ou pas ?
Hors ligne
C vrai que le c++ est l'evolution logique du C, mais la grande difference vient que c un langage objet. Il est plus lent que le C, et puis g appris le C en premier, alors comme je me consacre qu'a ma g100 opur l'instant, ben le C++ me sert pas a grand chose.
Mais je crois que mastermage a de bonne capacité en C++, tu devrai peut-etre le contacter.
Et oui et non, les progs sont pas forcement plus gros, mais si tu utilise des ft c++ alors que le C suffit, ben oui, c plus gros.
@+
Que veux tu dire par la :
si tu utilise des ft c++ alors que le C suffit, ben oui, c plus gros
De tt facons, le C suffit toujours, tu px dans tous les cas écrire en C ce qui est écrit en C++ ! Seulement, le C++ ca clarifie. Tekken et MarioKart sont écrits en C++, et jeu peux te dire que j'abuse des classes sans modération ! Le C++ et la Graph100 ne sont pas du tout incompatibles !!
Enfin voila.
Donc je lance un appel à mastermage : lis ce thread et dis moi ce que tu pense de mon problème de destructeurs.
;-) @+
Hors ligne
Je voulais cimplement dire que pour les truc simple, il vaut mieux utilisé du C. Mais il est clair que le C++ a de gros avantages, et tu fais bien de l'utilisé.
@+
Hors ligne
Tout a fait d'accord mec ;-)
Mais les "trucs simples" de viennent tré vite compliqués.
P.ex pour gérer les bmp ds 1 prog: au lieu de créer 1 tableau de pointeurs et 1 autre tableau pour les largeurs, longueurs, etc ... , bin tu crée 1 classe qui contient tt ca avec en + tt les fonctions de gestion (ouverture, fermeture, affichage, etc...) et hop! c simplifié et bcp + pratique à utiliser.
Enfin c mon avis ... ;-)
En tt cas côté optimisation en taille, je suis rassuré: je peux programmer en C++ abusément (ca se dit ?)
Hors ligne
À propos de la taille, vous avez remarqué que Tekken faisait plus de 60 Ko ? et qu'il fonctionnait quand même !
Hors ligne
ba la version que j'ai fait 64 242 !!! et je pense pas qu'il y ait que de (char)0 à la fin (j'avais vérifié).
Hors ligne
En fait tas jamais besoin dappeller explicitement un destructeur, je mexplike:
Tauras jamais a faire ce ke tas fait c a dire: fgp.~BMP
en fait kan tu crees un Destructeur c juste pour dire au programme que lorske la variable fgp (structure ds ce cas) doit etre detruite, voila comment on la detruit (utile ds le cas ou tas alloué de la mémoire dans la construction de l'objet),
si tu declare pas le destructeur, bein meme en kittant le programme lespace alloué pour ta variable sera toujours occupé et ta Ram sera utilisée inutilement.
En résumé: tas pas besoin de faire cet appel explicite.
Jespere avoir été clair L@rk !!
@+
y@ss