titel
-
nachrichtentext
-
A) Lerne dich zu artikulieren "hat-eine-beziehung"

Geht nicht ist keine Fehlerbeschreibung *gähn*
-
nachrichtentext
-
Ahat keinen Konstrukter, der ohne Argumente auskommt -> Initialisierungsliste notwendig. Steht doch ziemlich klar in der Fehlermeldung.
-
Tachyon schrieb:
Ahat keinen Konstrukter, der ohne Argumente auskommt. Steht doch ziemlich klar in der Fehlermeldung.Und genau deswegen kann man eine Fehlerbeschreibung mitliefern. Das kann man auch so sehen, aber der Compiler sagt einem doch alles.

-
nachrichtentext
-
Du musst aobj in der Initialisierungsliste initialisieren, weil du keinen Standardkonstruktor für A definiert hast. In diesem Fall wird auch nicht automatisch ein Standardkonstruktor erstellt, da du einen Konstruktor mit 2 Parametern definiert hast. Aber eigentlich ist es eh von Vorteil es in der Initialisierungsliste zu machen. In der Initialisierungsliste wird das Objekt direkt initialisiert (per Copy-Konstruktor) und das war es. Im Rumpf des Konstruktors, würde das Objekt bereits durch den Standardkonstruktor initialisiert worden sein und dann nochmal reinitialisiert werden durch das Kopieren eines anderen Objekts (Zuweisung). Das ist unnötig und kann durch die Initialisierungsliste vermieden werden. Zudem solltest du A im Konstruktor von B1 als const& (konstante Referenz) deklarieren, so nimmt es ja auch der Kopierkonstruktor von A entgegen. Außerdem spart das, das Anlegen einer ebenfalls unnötigen Kopie bei der Parameterübergabe:
B1::B1(double D, A const &a) : aobj(a) { ... }Neben eines Objekts A kannst du deinem Konstruktor in B1 (vielleicht als zusätzlicher Konstruktor) auch die Parameterliste von A geben und dann ebenfalls in der Initialisierungsliste an aobj übergeben:
B1::B1(double D, std::string const &s, int i) : aobj(s, i) { ... }Beim Konstruktor in A würde ich den string in der Parameterliste evtl. auch als const& deklarieren, dann wird keine Kopie erzeugt bei der Übergabe (da konstante Referenz) und dann nochmal eine bei der Initialisierung von name (ich gehe mal davon aus, ohne die genaue Implementierung zu kennen, dass der string der an A übergeben wird, an name zugewiesen wird).
Greetz
-
nachrichtentext