nicht alle parameter an konstruktor der basisklasse weitergeben.



  • hi,
    ich versuche grad mit qt eine klasse zu realisieren, in der der konstruktor eigene argumente bekommt und nicht alle an die basisklasse (QLabel) weitergibt.
    das sieht in etwa so aus:

    class basisklasse 
    {
    public:
    basisklasse(int argument1);
    private:
    int wert;
    }
    class abgeleiteteklasse : basisklasse {
    public:
    abgeleiteteklasse(int argument1, int argument2);
    private:
    int andererwert;
    }
    basisklasse:basisklasse (int argument1)
    {
    wert = argument1
    }
    abgeleiteteklasse::abgeleiteteklasse( int argument1, int argument2) : basisklasse ( argument1) //Hier kommt der Compilerfehler!
    {
    andererwert = argument2;
    }
    main () {
    abgeleiteteklasse *objekt = new abgeleiteteklasse(3,5);
    return 1;
    }
    

    ich hätte gern, dass das da oben tut! tut es aber nicht!
    compiler-fehler:
    default argument missing for parameter 2 of abgeleitetklasse:abgeleiteteklasse(int, int)



  • Ich hoffe, die fehlenden Semikolons hinter den Klassendefinitionen sind ein C&P-Fehler. Wenn nicht, korrigieren 😉

    Außerdem wäre es nett zu wissen, in welcher Zeile der Fehler aufgetreten ist. (und wie du ein abgeleiteteklasse-Objekt anlegst)



  • Code?



  • *hehe* ich vergess sie immer wieder!
    (in meinem projekt sind sie alerdings vorhanden)



  • Vielleicht liegt es ja an der 'private'-Ableitung, also besser

    class abgeleiteteklasse : public basisklasse
    {
      // ...
    };
    


  • Weiß nicht wo dein Problem ist... geht ohne weiteres:

    class base
    {
    public:
    	base(const int arg) : m_value(arg)
    	{
    	}
    
    public:
    	virtual void show() { std::cout << m_value << std::endl; }
    
    private:
    	int m_value;
    };
    
    class my_class : public base 
    {
    public:
    	my_class(const int arg1, const int arg2) : base(arg1), m_value2(arg2)
    	{
    	}
    
    	void show() { base::show(); std::cout << m_value2 << std::endl; }
    
    private:
    	int m_value2;
    };
    
    int main() 
    {
    	my_class inst(10, 5);
    	inst.show();
    }
    


  • Th schrieb:

    Vielleicht liegt es ja an der 'private'-Ableitung, also besser

    class abgeleiteteklasse : public basisklasse
    {
      // ...
    };
    

    ja des public vergess ich auch immer, ist im projekt allerdings vorhanden

    auch wenn ich es so mache:

    klasse::konstruktor(int arg1, int arg2) : basisklasse(arg1), value(arg2)
    {}
    

    tut es nicht! 😞

    ich schreib mal des "original" auf

    MLabel::MLabel( QWidget *parent, QPoint *punkt)
      : QLabel( parent ) , point(punkt) // in dieser zeile kommt die fehlermeldung
    

    des is der konstruktor der klasse MLabel (die als eigenschaft einen Zeiger auf einen QPoint (point) hat), welche von QLabel abgeleitet ist.
    an den qlabel konstruktor soll dass der parent weitergegeben werden und an den mlabelkonstruktor soll punkt weitergegeben werden

    und die fehlermeldung dazu:

    default argument missing for parameter 2 of `MLabel::MLabel(QWidget*, QPoint*)'


Log in to reply