Article View: de.comp.lang.c++
Article #86Referenzen in Basisklassen initialisieren?
From: Andre Pareis
Date: Fri, 18 Dec 1992 13:31
Date: Fri, 18 Dec 1992 13:31
82 lines
2416 bytes
2416 bytes
Ich habe in einer Library ungefaehr so etwas geschrieben:
class Window
{
protected:
Window( View& workArea );
private:
View& root;
};
im .cc file:
Window::Window( View& workArea ): root(workArea)
{
}
Dann gibt es noch abgeleitete Klassen, die alle virtual public
zu Window sind:
class WinWithMover: virtual public Window
{
protected:
WinWithMover(); // hier ex. kein cons. mit einem View&
};
class WinWithName: virtual public Window
{
protected:
WinWithName( const char * );
};
===========================================
Das eigentliche darzustellende Fenster erbt dann von
meheren dieser abgeleteten Windows:
class MyWindow: public WinWithMover, public WinWithName
{
public:
MyWindow( View& workArea, const char *name ):
Window(workArea), WinWithName(name) {}
};
Das Problem ist, wenn ich nur die Klassen WinWith* compiliere,
erhalte ich die Fehlermeldung, dass die Klasse Window keinen
Defaultinitialisierer hat. Also schreibe ich einen:
protected: Window::Window();
diesen erklaere ich dann in den beiden direkt abgeleiteten Klassen
als private. Compiliere ich jetzt die Klasse Window, erhalte ich
die Warnung, dass root durch den Defaultkonstruktor nicht initiali-
siert wird. Ich weiss aber genau, dass dieser Window::Window()
Konstruktor nie benutzt wird, der er in jeder abgeleiteten Klasse
private wird.
Also: Wie kann ich das eben beschriebene Verhalten umgehen?
( Ich moechte wenn es geht KEINE Pointer benutzen )
Danke,
--
+-----------------------------------------------+
| Andr'e Pareis | Techn. University of Berlin |
|-----------------------------------------------|
| e-mail: pareis@cs.tu-berlin.de |
| subiaagb@w350zrz.zrz.tu-berlin.de |
| NeXT-mail: subiaagb@w271zrz.zrz.tu-berlin.de |
+-----------------------------------------------+
Technical Details
Message-ID:
<1gsjrvINNrfu@mailgzrz.TU-Berlin.DE>Path:
arc1-ca.pugleaf.net!sparky!uunet!math.fu-berlin.de!mailgzrz.TU-Berlin.DE!w350zrz!subiaagbShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!math.fu-berlin.de!mailgzrz.TU-Berlin.DE!w350zrz!subiaagb From: subiaagb@w350zrz.zrz.tu-berlin.de (Andre Pareis) Newsgroups: de.comp.lang.c++ Subject: Referenzen in Basisklassen initialisieren? Date: 18 Dec 1992 13:31:42 GMT Organization: Dept. of CS, Techn. University of Berlin Lines: 82 Sender: subiaagb@w350zrz (Andre Pareis) Distribution: world Message-ID: <1gsjrvINNrfu@mailgzrz.TU-Berlin.DE> Reply-To: pareis@cs.tu-berlin.de NNTP-Posting-Host: w350zrz.zrz.tu-berlin.de