Hilfe bei den Klassen



  • Hi Ich bastele gerade an einem Übrungsprogramm Hier ein Auszug aus meinem Quellcode:

    class Eins
    {
    friend class Zwei;

    public:

    Eins(wert1=5.0); <----errorC2629:

    private:
    float wert1;
    };
    class Zwei
    {
    public:
    float quadrat()
    {
    return wert1wert1;
    }
    float malx(float x)
    {
    return x
    wert1;
    }
    };

    Problem : Beim Versuch zu kompilieren kommt folgende Fehlermeldung :

    error C2629: 'class Eins (' unerwartet
    error C2238: Unerwartete(s) Token vor ';'

    Er Moniert die oeben markierten Zeilen.
    Weiß jemand rat ?



  • parameterübergaben an konstruktoren brauchen bei der deklaration datentypen...



  • ich habe die zeile so geändert:

    Eins(float wert1=5.0);

    Erhaöte daraufhin weiterhin die Fehlermeldung error C2065: 'wert1' : nichtdeklarierter Bezeichner

    Daraufhin erhalte ich bei der Zeile in der Class Zwei

    return wert1*wert1;
    folgende Meldung :

    warning C4244: 'return' : Konvertierung von 'int' in 'float', moeglicher Datenverlust

    Ich habe aber nicht eine int in meinem Code



  • class Eins 
    { 
        friend class Zwei; 
    
    public: 
    
        Eins(wert1=5.0); <----errorC2629: 
    
    private: 
        float wert1; 
    }; 
    class Zwei 
    { 
        public: 
        float quadrat() 
        { 
            return wert1*wert1; 
        } 
        float malx(float x) 
        { 
            return x*wert1; 
        } 
    };
    

    So nun ist es auch formatiert... 😃

    Seit wann ist eine Wertzuweisung bei der Deklaration möglich ?
    Und was bedeutet das ? Ich vermute mal, das sind optionale Parameter...

    In der Klasse Zwei wird der Wert wert1 nicht deklariert, das heisst, er
    ist unbekannt. Falls du mit VC arbeitest, ist mir der Grund klar,
    weshalb er die Warnung ausgibt. VC sieht eine neue Variable,
    gibt ihr automatisch den Datentyp int und bricht die kompilierung dann ab.
    Das ist typisch 😉 .

    mfg BlueShift



  • Woher soll denn 'Zwei' wert1 kennen?

    btw:
    kann es sein, dass dein Ctor so aussehen soll:
    Eins(float value=0.5f) : wert1(value) {}
    ?



  • Hi,

    ich denke mal, das hier entspricht deinen Vorstellungen. Hab deine Idee jetzt mal so hingebastelt, dass sie logisch und syntaktisch sinn ergibt.Is aber absoluter Schwachsinn, das Prinzip so aufzuziehen, die ganze zweite Klasse kannst du dir sparen...

    class Eins 
    { 
    	private: 
    
    	float wert1; 
    
    	public:
    
    	friend class Zwei;
    
    	Eins(float wert1p=5.0) : wert1(wert1p){}
    
    }; 
    
    class Zwei 
    { 
    private:
    
    	Eins eins;
    
    	public:
    
    		Zwei(float wert1p = 5.0) : eins(wert1p){}
    
    	float quadrat() 
    	{ 
    		return eins.wert1*eins.wert1; 
    	} 
    	float malx(float x) 
    	{ 
    		return x*eins.wert1; 
    	} 
    };
    

    MFG, '][' !



  • Hallo,

    in eine Klassen-Deklaration (Beschreibung) gehören grundsätzlich keine Werte bzw. Rückgabewerte.
    Die müssen in die Definition!
    z.B.:

    // Deklaration:

    Class Eins
    {
    public:
    int Eins(int wert);

    };
    🕶





  • Ich merke schon noch mal hinsetzen und überlegen 🙂
    Ich habe das nun so geändert, will aber immernoch nciht so ganz
    vorallem in class Zwei

    class Eins
    {
    friend class Zwei;
    
    public:
    
    	Eins()
    	{
    		float wert1=5.0;
    	};
    
    private:
    	float wert1;
    };
    class Zwei
    {
    public:
    	float quadrat()
    	{
    		return wert1*wert1;
    	}
    	float malx(float x)
    	{ 
    		return x*wert1;
    	}
    };
    


  • das vielleicht ?

    class Eins  {
    public:
      Eins ( float wert = 5.0 ):wert1 ( wert )  {};
    
    protected:
        float wert1;
    };
    
    class Zwei : public Eins  {
    public:
      float quadrat ()  {
        return wert1 * wert1;
      };
      float malx( float x )  { 
        return x * wert1;
      };
    };
    

    was auch immer


Anmelden zum Antworten