2017-03-14 1 views
0

classe parent: parentClass.hComment accéder à la valeur d'une autre classe dans la classe ouvrière actuelle

class parentClass : public QWidget 
{ 
    Q_OBJECT 

public: 
    QString nextFollowUpDate; //I want to access this variable from child class 

} 

classe parent: parentClass.cpp

// accessing child 

childClass*objcalender = new childClass(); 
objcalender->show(); 

classe enfant: childClass.h

class childClass : public QWidget 
{ 
    Q_OBJECT 

public: 
    childClass(); 
} 

Classe enfant: childClass.cpp

#include parentClass .h 

parentClass *myFollowUp = qobject_cast<parentClass*>(parent()); 

//object of myFollowUp is not created and program get terminated by showing exception 

parentClass->nextFollowUpDate = selectedDate; //can not access this variable 
+1

S'il vous plaît essayer de créer un [minimal, complet et Vérifiable Exemple] (http://stackoverflow.com/help/mcve) et nous montrer. –

+2

childClass n'hérite pas de la classe parent! Si vous souhaitez accéder à la valeur dans parentClass, vous devez créer une instance de cette classe. – basslo

+0

J'ai inclus #include parentClass dans la classe enfant – pravin

Répondre

0

Deux choses. Tout d'abord, si vous voulez accéder à une fonction membre ou à une variable de classe d'une autre classe, vous devez créer un objet de la classe que vous voulez accéder et ensuite utiliser "->" ou "." pour y accéder. Quelque chose comme ceci:

ParentClass* parentObjPtr = new ParentClass(); //not mandatory to use the new() operator, but it has always better to reserve the memory space 
parentObjPtr->varName = "hello"; 
//OR 
ParentClass parentObj = new ParentClass(); 
parentObj.functionName = "hello"; 

Mais si pour une raison quelconque, vous ne prévoyez pas sur la création d'objets de cette classe, vous pouvez toujours faire les membres que vous souhaitez accéder à « statique »:

class parentClass: public QWidget 
{ 

Q_OBJECT 

public: 

static QString nextFollowUpDate; 

} 

et puis faire pour accéder à cette variable membre:

ParentClass::nextFollowUpDate = "hello"; 
cout << "Content of nextFollowUpDate: " << ParentClass::nextFollowUpdate << endl; 

en outre, si vous prévoyez d'utiliser cette classe beaucoup mais ne veulent pas continuer à taper « ParentClass :: » dans votre code, vous pouvez définir un nam pour cette classe espace à côté de votre comprend:

#include "ParentClass.h" 
using namespace ParentClass; 
----ETC---- 
----ETC---- 

int main(){ 
nextFollowUpDate = "hello"; //because we defined a namespace for that class you can ommit the "ParentClass::" 
cout<<nextFollowUpDate<<endl; 
}