Article View: de.comp.lang.c++
Article #755Re: Problem mit Templates
From: Karl-Heinz Krause
Date: Wed, 08 Nov 1995 17:57
Date: Wed, 08 Nov 1995 17:57
86 lines
3344 bytes
3344 bytes
Am 7. Nov. 95 schrieb REDHAWK@doomsday.shnet.org:
> Am Dienstag, den 07.11.95 hatte REDHAWK folgendes mitzuteilen:
> =============================================================================
> Hallo
> Ich versuche seit langem template functions in mein Hauptprogramm einzubinden
> und zwar mit Hilfe einer Header-Datei. Es kommt aber immer nur die Meldung
> 'undefined symbol() in modul()..'. Auf einer UNIX-Oberfläche läuft es, aber
> bei meinem DOS-PC (BC 4.5) nicht. Breymann 'C++ Eine Einführung' schreibt,
> daß es nicht möglich ist templates als Header-Datei einzubinden, sondern nur
> als kompletten Quelltext. Fall es euch hilft, hier die Struktur meines
> Programms:
> --MAIN.CPP--
> #include <iostream.h>
> #include "func.h"
> void main();
> { <== Das ist hier nur ein kleines
> cout << funcb(1,2); Beispiel, zeigt aber die
> } Problematik
> --FUNC.H--
> template <class typ>
> typ funcb(typ a,typ b);
> --FUNC.CPP--
> template <class typ>
> typ funcb(typ a,typ b)
> { return (a*b);
> }
> Ich hoffe, daß mir irgend jemand da draußen helfen kann, da selbst mein Info-
> Prof verzweifelt!
Templates sind eine Sache in C++, die bis heute noch nicht wirklich
sauber definiert ist. Aus diesem Grunde verhalten sich die einzelnen
Compiler immer noch etwas anders. Am einfachsten wäre es, sich
ausschließlich auf inline-Templates zu beschränken, deren Definition
dann vollständig in den Header-Dateien steht. Das funktioniert nämlich
mit jedem Compiler, sofern der überhaupt Templates unterstützt.
Falls eine Template-Funktion zu groß ist für eine inline-Definition,
überleg Dir zuerst, ob man nicht Dinge daraus in eine nicht-Template-
Funktion auslagern und so die Template-Funktion auf eine inline-Funktion
reduzieren kann.
Wenn das nicht so ohne weiteres möglich ist, dann muß man sich notge-
drungen auf die Eigenschaften des jeweiligen Compilers einlassen. Bei
Borland C++ müssen Template-Definitionen vollständig im Header stehen,
auch wenn sie nicht inline sind. Leider gibt es auch Compiler, bei denen
das nicht möglich ist. Wer möchte, daß sein Programm sich von ver-
schiedenen Compilern übersetzen läßt, kommt deshalb um #ifdef nicht
herum. Beispiel:
--FUNC.H--
template <class typ>
typ funcb(typ a,typ b);
#ifdef BORLAND
template <class typ>
typ funcb (typ a, typ b)
{ return a*b; }
#endif
--FUNC.CPP--
#ifndef BORLAND
template <class typ>
typ funcb (typ a, typ b)
{ return a*b; }
#endif
--MAIN.CPP--
#include <iostream.h>
#include "func.h"
void main();
{
cout << funcb(1,2);
}
Karl-Heinz Krause
Technical Details
Message-ID:
<47qr1j$fhp@news00.btx.dtag.de>Path:
arc1-ca.pugleaf.net!news00.btx.dtag.de!not-for-mailReferences:
<5xPMTJTG6FB@redgo.doomsday.SHNET.ORG>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++,fido.c_plusplus_ger,maus.lang.c,z-netz.sprachen.c Subject: Re: Problem mit Templates Date: 8 Nov 1995 17:57:07 GMT Organization: Telekom Online Internet Gateway Message-ID: <47qr1j$fhp@news00.btx.dtag.de> References: <5xPMTJTG6FB@redgo.doomsday.SHNET.ORG> 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