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()
    

Anmelden zum Antworten