Question

Cela m'a déconcerté.Ce que j'essaie de faire est d'obtenir une variable de référence dans une classe wrapper pour pointer vers une struct objet dans la classe qu'il l'enveloppe de sorte que n'importe quel paramètre de variables dans la structure à partir d'autres classes qui utilisent la classe wrapper, sont en fait situé dans le enveloppés classe pas les wrappper classe.Pour ce faire, j'ai essayé de créer simplement une référence dans le film de la classe de la structure dans la enveloppé classe comme

class CClassWrap
{
    CClass::plot_type& PlotArgs;  
}  

et puis init PlotArgs

CClassWrap::InitWrap( CClass AppIfx )
{
    PlotArgs = AppIfx.PlotArgs;
}

Je veux juste PlotArgs à point pour le enveloppés de la classe de PlotArgs de sorte que lorsque PlotArgs est accessible à partir de dire ce

class StudiesBase:public CClassWrap
{
   //12 should show up in CClass because PlotArgs in CClassWrap points to the PlotArgs on CClass.
   PlotArgs.value = 12;

 }

12 s'affiche dans la enveloppé classes version de PlotArgs.Pour ce faire, j'ai essayé définition d'une référence défini dans l' .h fichier comme suit

#include "CClass.h"

class CClassWrap
{
 //PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
 CClass::plot_type& PlotArgs;  
}

CClassWrap est héritée dans une autre classe, de l'appeler StudiesBase

class StudiesBase:: public CClassWrap
{
     etc...
}

Lorsque cela est compilé, une erreur est donnée à dire non par défaut ctor existe pour CClassWrap.J'ai donc ajouter un Ctor

tels que CClassWrap ressemble maintenant

class CClassWrap
{
public:
      CClassWrap();
public:
     //PlotArgs is a struct with a few vars in it (int, long, etc.) that exists in CClass
     CClass::plot_type& PlotArgs;  
}

Cela génère une erreur C2758 dire que PlotArgs n'est pas inititlaized.

Ainsi, dans le ctor pour ClassWrap j'essaie d'init elle.

PlotArgs = AppIfx.PlotArgs;

où AppIfx est définie au moment de l'exécution comme un pointeur vers l'CClass de l'objet.Le compilateur n'aime pas que ce soit avec l'erreur C2758 variable doit être initialzied dans le constructeur de base/membre de l'initialiseur de liste, etc...

Si il semble que je suis en train de faire quelque chose que je suis totalement clair sur la façon de faire qui serait certainement le cas!Toute aide serait grandement appréciée.

Était-ce utile?

La solution

C'est où vous êtes allé mal

CClassWrap::InitWrap( CClass AppIfx )
{
    PlotArgs = AppIfx.PlotArgs;
}

vous ne pouvez pas relier une référence.Une fois une référence se réfère à quelque chose, il ne peut jamais être fait pour se référer à quelque chose d'autre.Ce code (si vous avez exécuté) à attribuer AppIfx.PlotArgs quelle que soit PlotArgs référencé, c'est clairement pas ce que vous souhaitiez.

Vous devez déplacer ce code dans le constructeur

CClassWrap::CClassWrap( CClass AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}

Mais notez également que ce code constructeur de copie l'CClass de l'objet, de sorte qu'il ne pourrait pas faire ce que vous attendez (vous risquez de vous retrouver en référence à un copié PlotArgs objet, bien que cela dépende de la façon dont l'CClass constructeur de copie d'œuvres).Donc, il est probablement préférable d'utiliser une référence ici

CClassWrap::CClassWrap( CClass& AppIfx ) : PlotArgs(AppIfx.PlotArgs)
{
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top