Fonction dans une structure ?

cs_mayti Messages postés 36 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 11 juin 2005 - 26 mars 2005 à 18:21
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 26 mars 2005 à 21:45
Bonjour, voilà j'esseye d'utiliser une fonction dans une structure pour par exemple effacer un fichier:





struct FICHIER


{


char *path;


static void delete();


};





je l'utiliserais comme ça:





FICHIER file;


file.path = "c:\\fichier.exe";


file.Delete < ici ça doit appeller la fonction delete()





void Delete(char *File)


{


DeleteFile(File)


}





Le code compile mais je dois mal utiliser la fonction dans la structure, comment faut il faire ?


et aussi comment passer le paramétre file.path à Delete() juste avec file.Delete ?

6 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 mars 2005 à 19:13
Avec le plus grand des etonnements, je viens d'essayer de 'mettre' une fonction dans une structure et ca marche..Il faut utiliser un pointeur de fonction dans ta structure :


#include <stdio.h>
#include <stdlib.h>


struct fonc {
int (* pCoucou)(char *);
};


int Coucou(char *szBuffer)
{
printf("coucou");
return 0;
}


int main()
{
struct fonc Func;


Func.pCoucou = Coucou;
Func.pCoucou("Hello");


system("PAUSE");
return 0;
}

Voila, je ne sais pas du tout s'il est 'correct' de faire ce genre d'operations en C, mets toi au C++, je crois savoir que ce genre de trucs est la base.

+2(p - n)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 mars 2005 à 19:36
Au niveau de la synthaxe ca serait plutot:

(*Func.pCoucou)("Hello");



Et oui, meme si c'est possible, le C n'offre pas de support pour la
programmation orientée objet donc se mettre au C++ est une solution.

Il existe aussi des headers en C permettant de faire de la
programmation orientée objet et générique à l'aide de jeux de macros,
mais c'est trés laborieux, ca ne peut etre une solution uniquement pour
les envirronements dépourvus de compilateurs C++ (ou de cfront).
0
cs_mayti Messages postés 36 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 11 juin 2005
26 mars 2005 à 20:29
Merci bien :)



Et aussi le 2éme probléme: pour effacer le fichier je fais : (*file.pDelete)(file.path);



comment faire ça sans préciser (file.path) ? donc qu'il récupére lui même file.path



Merci.

0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 mars 2005 à 21:11
Tu ne peux pas, c'est possible en C++ car l'adresse de l'instance est
passée en paramètre caché (pointeur this), mais en C tu dois passer
explicitement file.path en paramètre, ou plus généralement l'adresse de
l'instance.
0

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

Posez votre question
cs_mayti Messages postés 36 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 11 juin 2005
26 mars 2005 à 21:19
ok, si tu as un code d'exemple pour le pointeur this je veux bien ;)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
26 mars 2005 à 21:45
Un exemple ok, mais c'est du C++ (pas de support en C)



#include <string>





struct FICHIER


{

FICHIER(const std::string & p = "" ) : path(p) {}




void delete()

{




DeleteFile(path.c_str()); // ou


DeleteFile(this->path.c_str());


}



private:


std::string path;




};






FICHIER file("c:\\fichier.exe");

file.delete();
0
Rejoignez-nous