Transfere de pointeur

Résolu
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009 - 14 oct. 2006 à 17:09
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 17 oct. 2006 à 06:37
salut, j'ai créé un pointeur dans une fonction, comment je peux faire pour pouvoir le réutiliser dans une autre fonction, ou mieux l'utiliser partous ?

merci d'avance (ps : ya pas un truc comme global... ?)

@+

10 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 oct. 2006 à 17:50
Tu peux le déclarer en globale. Sufit simplement de le placer en dehors de toute fonction. Généralement au début du fichier par exemple:

#include <windows.h>

#define TOTO(x) x = 3

int *vglobal = 0;

int __stdcall WinMain(...)
{
    ...
    vglobal = (int*)malloc(255*sizeof(int));
    ...

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 oct. 2006 à 21:06
Oui plus ou moin.
wx?? C'est du Widget? J'ignore complètement comment ça fonctionne mais si t'est sûr de ton code, on continue:

// debut du fichier xxx.cpp
#include <...>
...
FSOUND_STREAM *musique = NULL;

// la fonction
void MyFrame::OnOpen(wxCommandEvent&
WXUNUSED(event))   {         wxString fichier =
wxFileSelector("Choisissez votre fichier audio :","", "", "","Fichiers
MP3 (*.mp3)|*.mp3|Tous les fichiers (*.*)|*.*|Fichiers WMA
(*.wma)|*.wma");

                  FSOUND_Close();

                  FSOUND_Init(44100, 32, 0); (initialisation)
                  musique = FSOUND_Stream_Open(fichier, 0, 0, 0);

               FSOUND_Stream_Play(FSOUND_FREE, ::musique);             
}

et si tu veux l'utiliser dans d'autre fichier .cpp du même projet, suffit de le déclarer en extern dans tes autre fichiers:

// autre fichier xxx.cpp exemple
#include <windows.h>
#define ...

...

extern FSOUND_STREAM *musique;

...

et il sera utilisable avec les fonctions de ce fichier.
C++ (@++)<!--
3
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
14 oct. 2006 à 17:54
a oui, seulement le probleme, c'est que je suis obligé de le declaré dans une fonction
je m'explique :dans une fonction j'ouvre la boite de dialogue ouvrir un fichier
sa me renvoi le fichier ouvert.
je fait un pointeur avec ce nom de fichier
et c ce pointeur que je voudrais globale.

question : est ce que le code que l'on met dans la classe principale (la ou on met les boutons et tt et tt) et lu en boucle ou une seul fois ?

@+
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 oct. 2006 à 19:17
Je ne comprend pas ce que tu veux faire. Pourrais tu mettre le code de ta fonction ici s'il te plait?

C++ (@++)<!--
0

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

Posez votre question
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
14 oct. 2006 à 19:45
ok voici le code de ma fonction, et après j'ai une autre fonction qui a besoin d'un pointeur qui est créé dans celle la pour arreter la musique

void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))   {         wxString fichier = wxFileSelector("Choisissez votre fichier audio :","", "", "","Fichiers MP3 (*.mp3)|*.mp3|Tous les fichiers (*.*)|*.*|Fichiers WMA (*.wma)|*.wma");
    // effacement de l'ancien fichier :
                  FSOUND_Close();
    // redemarage de FMOD :
                  FSOUND_Init(44100, 32, 0);
    // chargement du fichier :
                  FSOUND_STREAM *musique = NULL; // pointeur musique (initialisation)
                  musique = FSOUND_Stream_Open(fichier, 0, 0, 0);
    // lecture du fichier musique :
               FSOUND_Stream_Play(FSOUND_FREE, ::musique);




            
}

le pointeur qu'il me faut est le pointeur *musique, car dans une autre fonction j'ai une commande comme ceci :

void MyFrame::musique_stop(*musique) {
     FSOUND_Stream_Stop(musique);
}

en fait il faudrait que je réussise a mettre mon pointeur en dehort de toute fonction mais qui'il soit definit par la fonction OnOpen, c'est possible ?




merci,

@+
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
14 oct. 2006 à 21:39
le :: sa veut dire que sa va chercher une variable ou un pointeur dans un lvl inferieur c'est sa ?
void fonction();
long i = 100;
fonction()
voidfonction() {
::i+=100;
}

i sera donc egale a 200 ?
sa veut dire qu'on a plus besoin de pointeur ? ^^
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 oct. 2006 à 21:49
Je ne sais pas. Je ne connais pas le fonctionnement du Widget. Ce que je sais c'est que d'habitude, :: est utilisé avec la MFC et est utiliser devans une fonction. Ça veut dire d'appeller la fonction système au lieu de celle fournit par la MFC. Mais là, je ne sais pas si ça représente la même chose alors je ne vais rien dire de peur de sortir une bêtise.

C++ (@++)<!--
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
14 oct. 2006 à 21:50
heu je doit rajouter :: devant le mot musique, une ligne au dessus de la ou tu a mis les :: aussi je suppose non ?
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
14 oct. 2006 à 21:53
bon en tt cas je pence que oui, tt marche bien, je peux même faire stop  !
merci beaucoup !
ps : oui c avec wxwidgets
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
17 oct. 2006 à 06:37
Bonjour,

un exemple avec :: (ça a un nom du style "...  de portée" mais j'ai la mémoire qui flanche)

#include
int toto = 24;

int main()
{
    int toto = 18;
    std::cout << "toto local : " << toto << std::endl;
    std::cout << "toto global : " << ::toto << std::endl;
    return 0;
}

par contre, dans ton exemple, pourquoi la fonction MyFrame::OnOpen ne retournerai pas un FSOUND_STREAM * au lieu de mettre une variable globale, surtout si tu t'en sers que dans une autre fonction ?

Matt...
0
Rejoignez-nous