Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

1

25.09.2006, 18:08

Template - Problem bei der Deklaration/Benutzung

Hallo.
Ich möchte mir ein paar Grundfunktionen als Template's ablegen. Minimum, Maximum, Addition usw.

utilities.h

C-/C++-Quelltext

1
2
template<class T>
T Add(T a, T b);


utilities.cpp

C-/C++-Quelltext

1
2
3
4
5
template <class T>
T Add(T a, T b)
{
    return (a + b);
}



So weit so gut. In der utilities.cpp kann ich das Template einwandfrei benutzen. In der einer anderen cpp-Datei nicht. Woran kann das liegen? Der Header ist selbstverständlich eingebunden....


Debug-Print:

Quellcode

1
2
3
4
5
Kompilieren...
diabolic.cpp
Verknüpfen...
diabolic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl Add<int>(int,int)" (??$Add@H@@YAHHH@Z)" in Funktion "_WinMain@16".
C:\Dokumente und Einstellungen\Rico.HARD\Eigene Dateien\My Projects\cpp\Grafikprogrammierung\diabolic\Debug\diabolic.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


Danke im voraus,
Rico
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

25.09.2006, 18:17

Lies dir mal ein Tutorial über Templates durch.
Templates müssen direkt im Header implementiert werden, und zwar nur dort.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

3

25.09.2006, 18:19

// David: Das stimmt nicht ganz.

Normalerweise setzt man Template-Definitionen komplett in die Header-Dateien:

utilities.h

C-/C++-Quelltext

1
2
3
4
5
template <class T>
T Add(T a, T b)
{
    return (a + b);
} 


Alternativ ist es auch möglich, die Definition von der Deklaration zu trennen. Das sieht dann in diesem Fall so aus:

utilities.h

C-/C++-Quelltext

1
2
template<class T>
T Add(T a, T b);


utilities.cpp

C-/C++-Quelltext

1
2
3
4
5
export template <class T>
T Add(T a, T b)
{
    return (a + b);
} 


Ich empfehle allerdings normalerweise Variante 1.

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

4

25.09.2006, 18:26

Template-Funktionen müssen im Header deklariert und implementiert werden?

EDIT: Ich war zu langsam, habs eben auch ergoogelt. Danke :)
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

25.09.2006, 18:27

Normalerweise (siehe letzter Beitrag) richtig. Templates sind ja nur Vorlagen, von denen der Compiler instanzen erzeugt. Damit haben sie eine Sonderstellung.

Werbeanzeige