Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1391 connectés 

  FORUM HardWare.fr
  Programmation

  ssnniifff....j'ai perdu mon pointeur !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ssnniifff....j'ai perdu mon pointeur !!!

n°17681
kalynthia
c'est manu-le-tricheur!!!
Posté le 08-03-2001 à 14:21:15  profilanswer
 

salut!!
 
bon voila mon pb:
j'initialise un pointeur de structure dans une fonction , je lui passe quelque parametre ....(jusque la tout va bien)
ensuite je passe a une autre fonction( pas dans le meme fichier)et je veux récuperer mon pointeur tout initialiser, mais entre temp il s'est barrer!!!
 
voici d'ailleurs comment je fait pour le récuperer ( ce qui ,ne doit pas etre ça apparement !!)
 
struct CCDL * pCamera = _pCcd::Instance()->TheCTest_timingDlg->camera;
 
ça vous dit qq chose?????
merci pour vos réponse!!

mood
Publicité
Posté le 08-03-2001 à 14:21:15  profilanswer
 

n°17683
verdoux
And I'm still waiting
Posté le 08-03-2001 à 14:39:20  profilanswer
 

Y a trop peu d'éléments pour qu'on puisse t'aider.

n°17691
kalynthia
c'est manu-le-tricheur!!!
Posté le 08-03-2001 à 15:11:57  profilanswer
 

ok !bon je vais détailler....
 
j'ai une structure CCDL avec diverse information :
struct CCDL {unsigned char mode,
      timer,
      result,
      text,....et d'autre
  };
 
j'ai une boite de dialogue avec sa classe associé CTest_timingDlg.
dans cette boite de dialogue je crée 2 pointeur sur ma structure ,puis j'initialise leur variables :
donc dans test_timingDlg.h je fait:
 
CCDL * camera1;
CCDL * camera2;
 
dans test_timingDlg.cpp ,dans l'initdialog je fait :
 
camera1 = new CCDL;
camera2 = new CCDL;
 
camera1->mode = 128;
camera1->timer= 0;
...etc
camera2->mode = 128;
camera2->timer= 0;
...etc
 
jusque la tout va bien, j'ai bien mon pointeur qui s'initialise correctement et la structure qui se remplit!!
le pb c'est quand je veux faire passer cette structure toute belle a une autre fonction situer dans un autre fichier
 
donc je reprend:
sur ma boite de dialogue j'ai un bouton demarrer qui va me lancer une acquisition sur ma camera, ces valeur vont etre placer dans ma structure puis traité, la methode qui les traite s'appelle traite_camera et ce situe dans gestion_camera.cpp.donc au debut de ma fon ction j'appelle mon pointeur camera1:
 
struct CCDL * pDlg =_pCcd::Instance()->TheCTest_timingDlg->camera1;
 
j'explique ce que je fait ( donc ce qui devrait marcher !!):
 
j'initialise un pointeur pDlg de type structure CCDL .Pour cela je vais chercher le pointeur camera1 dans l'instance de ma boite de dialogue ( vous suivez toujours???).mais le pb c'est que j'ai perdu mon pointeur pDlg vaut 0xcdcdcdcd c'est a dire rien!!!!
 
pour ceux qui veulent pousser dans le détail voila comment je fait l'instance
donc dans le fichier _pCcd.h
 
#include "test_timingDlg.h"
#include "Gestion_Camera.h"
 
 
class CGestion_Camera;
class CTest_timingDlg ;
class _pCcd  
{
public:
 _pCcd();
 virtual ~_pCcd();
 static _pCcd * Instance();
 static _pCcd * _instance;
 CTest_timingDlg * TheCTest_timingDlg;
 CGestion_Camera * TheCGestionCamera;
 _pCcd * TheC_Ccd;
};
 
et dans le fichier _pCcd.cpp :
 
#include "stdafx.h"
#include "test_timing.h"
#include "_pCcd.h"
 
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
_pCcd::_pCcd()
{
 TheCTest_timingDlg = new CTest_timingDlg;
 TheCGestionCamera = new CGestion_Camera;
 
 this->_instance = this;
}
 
_pCcd::~_pCcd()
{
 
}
_pCcd * _pCcd::_instance;
 
_pCcd * _pCcd::Instance()
{
 if(_instance ==0)
 {
  _instance = new _pCcd;
 }
 return _instance;
}
 
 
Bon je pense avoir assez détailler, merci de m'aider c'est pour un projet urgent !!!
je remercie donc d'avance toute les réponse !!!

n°17701
kalynthia
c'est manu-le-tricheur!!!
Posté le 08-03-2001 à 15:50:18  profilanswer
 

alors ?personne pour m'aider???
 
on me demande des détail , j'en donne et maintenant je fait fuir tout le monde!!
 
PLEASE HELP ME!!!

n°17705
verdoux
And I'm still waiting
Posté le 08-03-2001 à 16:02:25  profilanswer
 

Il doit manquer la définition du membre statique _instance:
_pCcd* _pCcd::_instance = 0;
 

 


--Message édité par Verdoux--

n°17724
n0mad
inscrit au XXe siècle
Posté le 08-03-2001 à 17:49:20  profilanswer
 

Si j'ai bien compris, la classe _pCcd est un singleton ?
 
En principe j'initialise _instance dans Instance() et non dans le constructeur.
 
Je m'explique : quand tu appelles un membre statique d'une classe avec l'operateur de portée, il n'y a pas de raison pour que le constructeur ait déjà été appelé une fois !
 
Comme Verdoux l'a dit, il manque _pCcd* _pCcd::_instance = 0;  
mais il vaut mieux aussi que tu mettes le constructeur en protected (le _instance=this n'est alors plus utile).


---------------
Pipiru piru piru pipiru pi
n°17807
kalynthia
c'est manu-le-tricheur!!!
Posté le 09-03-2001 à 10:38:10  profilanswer
 

tout dabord je vous remercie pour l'aide que vous m'apportez
donc j'ai modifié le programme comme ceci :
 
_pCcd::_pCcd()
{
 TheCTest_timingDlg = new CTest_timingDlg;
 TheCGestionCamera = new CGestion_Camera;
 
// this->_instance = this;
}
 
_pCcd::~_pCcd()
{
 
}
 
_pCcd * _pCcd::_instance=0;
 
_pCcd * _pCcd::Instance()
{
 
 if(_instance ==0)
 {
  _instance = new _pCcd;
 }
 return _instance;
}
 
ça c'etait pour le .cpp et voici pour le .h:
 
class _pCcd  
{
public:
 
 virtual ~_pCcd();
 static _pCcd * Instance();
 static _pCcd * _instance;
 CTest_timingDlg * TheCTest_timingDlg;
 CGestion_Camera * TheCGestionCamera;
 _pCcd * TheC_Ccd;
protected:
 _pCcd();
 
};
 
mais ça jne marche pas....
j'ai essayer de mettre
 _pCcd* _pCcd::_instance = 0;  
dans le constructeur mais j'ai des erreur a la compil!!!
 
en fait je pense que c'est plus un pb de fond que j'ai : JE NE COMPREND PAS CE QUE JE FAIT!!!
 
donc si vous voulez m'expliquer exactement ces histoires d'instance ça pourrait m'aider !
 
merci.
 
Ps: on m'a dit (sur un autre forum) de faire ceci pour récupérer mon pointeur:
 
void CTest_timingDlg::getCamera378(CCDL *monPointeur)
{
memset(monPointeur, '\0', sizeof( struct CCDL ) );  
memcpy( monPointeur, this->camera378 , sizeof( struct CCDL ));  
}
 
ça ne marche pas non plus!!!

n°17851
kalynthia
c'est manu-le-tricheur!!!
Posté le 09-03-2001 à 14:48:28  profilanswer
 

:hot:

n°17866
verdoux
And I'm still waiting
Posté le 09-03-2001 à 15:47:58  profilanswer
 

_pCcd::Instance()->TheCTest_timingDlg->camera1 va récupérer le pointeur caméra1 de l'objet TheCTest_timingDlg crée par l'appel TheCTest_timingDlg = new CTest_timingDlg; dans le constructeur de _pCcd.
 
Il faut donc voir si le constructeur de la classe CTest_timingDlg initialise correctement le pointeur en question.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  ssnniifff....j'ai perdu mon pointeur !!!

 

Sujets relatifs
Un layer qui suit le mouvement du pointeur?a la recherche de l'ocx perdu
Plus de sujets relatifs à : ssnniifff....j'ai perdu mon pointeur !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR