A
Neuling_ schrieb:
2.Intern schon aber damit geht meine Fehlermeldung nicht weg!
Wie wäre es wenn du dir erst einmal überlegst, wie du Fragen stellen musst, damit du sinnvolle Antworten erwarten kannst. Denk bitte daran, das wir weder deinen Sourcecode noch irgendwelche sinnvollen Fehlermeldungen vorliegen haben. Die Fehler des Compilers ergeben in der Regel Sinn.
Stell deine Variable _ui auf einen Zeiger um und weise ihr die Adresse der Übergebenen Referenz zu. Ganz davon abgesehen das du (sofern du nicht durch - uns unbekannten - Vorgaben eingeschränkt bist) mit der C++ Standardbibliothek, Boost und dem TR1 schon einige Probleme von dir lösen könntest.
1. Zu jedem new gehört auch genau ein delete.
=> Sinnvolle Alternativen sind Smartpointer, wie z.B. boost::scoped_ptr, boost::shared_ptr/std::tr1::shared_ptr.
2. Ohne deine aktuelle Fehlermeldung und dem aktuellen Codeausschnitt wirst du von uns keine Hilfe erwarten können. Kurz gesagt: Du machst etwas falsch. Und sei es das dein Design (wie ich annehme) nicht sinnvoll gewählt ist.
Ich frage mich z.B. ob dein Command ohne UI-Objekt überhaupt Sinn macht. Wenn nein, kommst du ausschließlich mit Referenzen in deiner Commandklasse aus, sofern du die Initialisierungsliste verwendest UND ohne Standardkonstruktor/Zuweisungsoperator auskommst.
Eine Initialisierungsliste ist immer nötig, wenn...
a) du Referenzen initialisieren willst.
b) du Konstanten initialisieren willst.
c) du einen anderen als den Standardkonstruktor der Basisklasse verwenden willst.
class Base
{
public:
Base(int foo)
: foo(foo) // Initialisierungsliste
{}
virtual ~Base()
{}
private:
int foo;
};
class Inherited : public Base
{
public:
Inherited(int foo, int foo2)
: Base(foo), // Den Konstruktor Base(int) verwenden,
foo2(foo2) // und weiteren Member initialisieren...
{}
virtual ~Base()
{}
private:
int foo2;
}
3. Basisklassen sollten entweder einen virtuellen Destruktor oder nur private Konstruktoren besitzen.
=> Des weiteren könnte auch hier Boost/TR1 einen Teil des Entwurfes ersetzen (boost::function/std::tr1::function, boost::bind/std::tr1::bind).
cu André