2012-10-19 5 views
-4

J'ai code suivant:accès à une variable membre pointeur dans la classe dérivée

class B{ 
    protected: 
    X *x; 
    public: 
    function(char *data){ 
     // access x 
     // works fine 
    } 
}; 

class D: public B { 
    function2(char *data) 
    { 
      // access x 
      // gets garbage 
    } 
}; 

J'ai une variable membre qui est le pointeur. de plus ce pointeur est à l'intérieur "data" mais quand j'accède en classe D il montre des ordures.

peut un corps s'il vous plaît aidez-moi ...

+0

« En outre, ce pointeur est à l'intérieur « dites données » quoi? –

+1

Le membre du pointeur en lui-même est inutile, sauf si vous faites vraiment pointer vers un objet valide de type' X'.You ne montrent pas cette partie du code, en particulier la Constructeur ou la fonction membre qui fait cela.Sans voir ce code, il est impossible de dire * Pourquoi? *, Si vous ne faites pas du tout alors ** vous devriez! ** –

+0

dire: x = (X *) (données + 23 + 26); – user1759515

Répondre

0

J'ai mis sur mon chapeau de débogage psychique, et arrive à la conclusion que vous faites probablement quelque chose comme ceci:

class Packet 
{ 
public: 
    Gizmo* gizmo_; 
}; 

class Processor 
{ 
public: 
    void ProcessPacket(char* packet); 
}; 

// ... 

Packet packet; 
// packet filled with goodies 

Processor proc; 
proc.ProcessPacket(reinterpret_cast<char*>(&packet.gizmo_)); 

Am I droite?

Si tel est le cas, je pense que le Gizmo pointé vers vous est en quelque sorte tombé hors de la portée - devenant ainsi détruit - ou vous avez mal exécuté la distribution.

+0

ouais pas complet. Le paquet est la classe de base avec la fonction ProcessPacket, et la classe du processeur est dérivée de la classe Packet. J'ai créé un objet de classe Processor et appelé "ProcessPacket". et puis * gizmo va corrompre – user1759515

Questions connexes