Article View: de.comp.lang.c++
Article #801Re: Templates in Klassen
From: Karl-Heinz Krause
Date: Tue, 14 Nov 1995 06:38
Date: Tue, 14 Nov 1995 06:38
65 lines
2741 bytes
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-mailReferences:
<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