2017-03-14 3 views
0

Geordnete Klasse zuzugreifen: parentClass.h, wie der Wert einer anderen Klasse in der aktuellen Arbeiterklasse

class parentClass : public QWidget 
{ 
    Q_OBJECT 

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

} 

Übergeordnete Klasse: parentClass.cpp

// accessing child 

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

Kinderklasse: childClass.h

class childClass : public QWidget 
{ 
    Q_OBJECT 

public: 
    childClass(); 
} 

Unterklasse: 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

Bitte versuchen, eine zu schaffen [Minimal, vollständig und prüfbare Beispiel] (http://stackoverflow.com/help/mcve) und zeigen Sie uns. –

+2

childClass erbt nicht parentClass! Wenn Sie auf den Wert in parentClass zugreifen möchten, sollten Sie eine Instanz dieser Klasse erstellen. – basslo

+0

ich habe # include Parent in der Kinderklasse – pravin

Antwort

0

Zwei Dinge. Erstens, wenn Sie auf eine Member-Funktion oder Variable einer Klasse aus einer anderen Klasse zugreifen möchten, müssen Sie ein Objekt der Klasse erstellen, auf die Sie zugreifen möchten, und dann einfach "->" oder "." um darauf zuzugreifen. Etwas wie folgt aus:

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"; 

Aber wenn aus irgendeinem Grund Sie nicht vorhaben, auf Objekte dieser Klasse erstellen, können Sie immer die Mitglieder machen Sie „statisch“ zuzugreifen:

class parentClass: public QWidget 
{ 

Q_OBJECT 

public: 

static QString nextFollowUpDate; 

} 

und dann dies tun, dass die Membervariable zuzugreifen:

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

auch, wenn Sie eine Menge auf die Verwendung dieser Klasse planen, aber nicht wollen, „Parent ::“ zu halten, die Eingabe in Ihrem Code können Sie eine nam definieren espace für diese Klasse neben Ihrem beinhaltet:

#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; 
} 
Verwandte Themen