🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #801

Re: Templates in Klassen

#801
From: Karl-Heinz Krause
Date: Tue, 14 Nov 1995 06:38
65 lines
2741 bytes
Am 13. Nov. 1995 schrieb Hans-Martin Speiser
(speiser@eric.u-strasbg.fr>):

> Hallo auch,

> ich versuche schon eine Weile unter Borland C++ 4.5 eine template Klasse
> in meine eigene Klasse zu integrieren. Dabei habe ich folgendes
> Problemchen:
> Ich kann die template Klasse nicht initialisieren!!
> Um etwas genauer zu sein habe ich eine Klasse "Eimer" angelegt, in der
> ich ein Attribut

> class Eimer
> {
> 	privat
> 		TArrayAsVector<string> inhalt;

> 	public:
> 		Eimer(void);
> 		Add_was(const string& s);
> }

> definiert habe. In dem Konstruktor zu dieser Klasse wuerde ich gerne den
> Array initialisieren, um dann direkt unter "Add_was" einen Befehl wie

> 	inhalt.AddItem(s);

> aufrufen zu koennen. (Dabei ist natuerlich "AddItem" in der
> Kontainerklasse definiert!)

> Und soweit bin ich bisher gekommen:

> Definiere ich meine Klasse "Eimer" wie oben dann findet "Borland" in dem
> Konstruktor der Klasse keinen default Konstruktor zum initialisieren der
> Variable "inhalt".
> Fehlermeldung: Cannot find default constructor to initialize member
> "inhalt" in function Eimer::Eimer()
>
> Definiere ich in meiner Klasse "Eimer" den "inhalt" so:
> "TArrayAsVector<string> inhalt();", dann bekomme ich folgende
> Fehlermeldung: Structure required on left side of . or .* in function
> Eimer::Add_was(const string &) und zwar in der Zeile von
> "inhalt.AddItem(s);". Was mach ich falsch?

Wenn man es so macht, dann ist "inhalt" eine Funktion und man kann
natürlich nicht "inhalt.AddItem(s)" schreiben.

> Bemerkung 1:
> 	Es gibt fuer TArrayAsVector<T> einen Konstruktor (x), der die Groesse
>       des Arrays angibt und einen leeren Array anlegt - schaetze den muss ich 
>       irgendwo verwenden - der geht aber nicht bei der Definition des Attributs 
>       "inhalt" in der Klasse "Eimer"!

> Bemerkung 2:
> 	Ich kann den Konstruktor von Bemerkung 1 wunderbar in einer Funktion
>       main() anwenden aber nicht in einem Konstruktor einer Klasse wie ich es will!

Der Konstruktor einer Membervariablen muß in der Definition des
Konstruktors für die Klasse aufgerufen werden. Etwa so:

	Eimer::Eimer(): inhalt(10) {}



Karl-Heinz Krause
Technical Details
Message-ID: <489dgv$u9t@news00.btx.dtag.de>
Path: arc1-ca.pugleaf.net!news00.btx.dtag.de!not-for-mail
References: <48741g$24k@apopi.u-strasbg.fr>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news00.btx.dtag.de!not-for-mail
From: Krause@btx.dtag.de (Karl-Heinz Krause)
Newsgroups: de.comp.lang.c++
Subject: Re: Templates in Klassen
Date: 14 Nov 1995 06:38:23 GMT
Organization: Telekom Online Internet Gateway
Message-ID: <489dgv$u9t@news00.btx.dtag.de>
References: <48741g$24k@apopi.u-strasbg.fr>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Sender: 0913148778-0001@btx.dtag.de (Karl-Heinz Krause)
X-Newsreader: Forte Free Agent 1.0.82