Problem bei Übergabe mit boolscher Vairable
-
Hi, ich habe folgenden Code:
Ich möchte in der "Ausgabe.cpp" eine Fehlermeldung ausgeben , falls "korrig" in der "Quader.cpp" "true" wird. Das klappt bei mir aber nicht.
Könnte jemand die entsprechenden Codeschnipsel in den Quellcode schreiben?Danke im voraus!!!!
/******************************* Koerper.h ********************************/ class Koerper { public: //Prototypen der Schnittstellenfunktionen long volumen(void); //Fuer Volumenberechnung float refpunktx(void); //Fuer X-Referenzpunkt float refpunkty(void); //Fuer Y-Referenzpunkt float refpunktz(void); //Fuer Z-Referenzpunkt //Daten die vererbt werden sollen protected: long vol; //Variable fuer das Volumen bool korrig; //Variable fuer die Fehlerbehandlung struct Pos //enthält die Daten des Referenzpunktes { float x; //fuer die X-Achse float y; //fuer die Y-Achse float z; //fuer die Z-Achse }refpunkt; //struct mit der Position fuer den Referenzpunkt }; #endif /*********************** Quader.h ************************/ class Quader : public Koerper { public: Quader(float b=100, float h=100, float t=100, float xref=50, float yref=50, float zref=50); ~Quader();//Destruktor //Prototypen der Schnittstellenfunktion float breite(void); float hoehe(void); float tiefe(void); private: float breit, hoch, tief;//Variablen fuer die Maße des Quaders }; #endif /************************** Quader.cpp ***************************/ Quader::Quader(float b, float h, float t, float xref, float yref, float zref) { //Initialisierung der bool`schen Variable korrig=false; /******************************************************************** **pruefen, ob der Quader ueberhaupt in das Koordinatensystem passt.** **Wenn nicht, dann erzeuge Standardquader und lege den Quader an ** **den Koordinatenursprung ** ********************************************************************/ if ((b>MaxX)||(h>MaxY)||(t>MaxZ)) { korrig=true; vol=breit*hoch*tief; //Berrechnung des Volumens refpunkt.x=xref; //Initialisierung der protected Variablen refpunkt.y=yref; refpunkt.z=zref; } Quader::~Quader() { cout<<"\n\nDestructor wurde aufgerufen!\t"; cout<<"Quader-Objekt wurde zerstoert!\n\n"; } float Quader::breite(void) { return breit;//Rueckgabe der Breite } float Quader::hoehe(void) { return hoch;//Rueckgabe der Hoehe } float Quader::tiefe(void) { return tief;//Rueckgabe der Tiefe } /************************* ausgabe.h *************************/ void ausgabe (Quader *objekt); //Prototyp des Unterprogramms ausgabe quader /*************************** ausgabe.h ***************************/ void ausgabe (Quader *objekt)//Ein pointer vom typ Quader mit dem Namen objekt { //So soll die Ausgabe ungefähr aussehen if(objekt->korrig()=true) { cout <<"\n\n"Der Koerper passt nicht ins Koordinatensystem!"; } }
-
Ich habe das zwar nur schnell ueberflogen aber ich denke du meinst so etwas :
//So soll die Ausgabe ungefähr aussehen if(this->korrig()=true) { cout <<"\n\n"Der Koerper passt nicht ins Koordinatensystem!"; }
anstelle von object "this"
-
Tommy78 schrieb:
//Daten die vererbt werden sollen protected:
datenelemente solltest du lieber nicht protected machen.
public hast du sie ja auch nicht.
stell lieber eine funktion bereit://Base-Klasse public: bool korrig () const { return korrig_; } private: bool korrig_;
das problem ist einfach, dass korrig von außen nicht sichtbar ist (und auch nicht sein sollte) du aber in ausgabe zugriff darauf brauchst.
abgesehen davon, dass es mit o.g. funktion dann so aussähe:if (objekt->korrig())
und basisklassen solltest du im allgemeinen einen virtuellen destruktor spendieren.
ansonsten solltest du vielleicht die implementierung noch ein bisschen stärker abkapseln (private machen und nur ausgewählten zugriff erlauben) - denn so kann jede abgeleitete klasse alles so verändern, wie sie will, ohne kontrolle.
-
Funktioniert leider nicht , bekomme immer folgende Fehlermeldungen:
'ausgabe' : global functions do not have 'this'-pointers
let of '->korrig' must point to class/struct/union
-
Funktioniert leider nicht , bekomme immer folgende Fehlermeldungen:
'ausgabe' : global functions do not have 'this'-pointers
let of '->korrig' must point to class/struct/union
-
So, hab es jetzt hinbekommen (nur noch ein Fehler):
bei korrigiert=false; kommt immer '=' overloaded function as left operand
bei korrigiert==false dasselbe.
Was ist noch falsch?
-
anscheinend hast du korrigiert zu einer funktion gemacht: aufrufen
korrigiert() == false
oder einfach
! korrigiert()