Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 08.12.2004, 13:23 Titel: [C++] inline Funktion geht nicht |
|
|
Wieso bekomme ich bei meiner inline/template-Funktion immer den Linker Fehler "unaufgelößter externer Verweis"?
Sehr wahrscheinlich hast Du im Header einen Prototypen definiert jedoch die Implementierung dieser Funktion in einer *.cpp Datei stehen, das ist so nicht "richtig". Eine Implementierung von inline, __inline bzw. __forceinline muss wie bei template-Funktionen und Klassen in der jeweiligen Headerdatei implementiert werden!
Bei Templates gibt es einen "speziellen Sonderfall":
Im Standard (Müsste C99 sein) gibt es die Möglichkeit Templates (Keine inline-Funktionen) in Dateien zu "spliten" wie man es normalerweise auch mit Funktionen oder Klassenfunktionen macht. Dies geht mit dem Schlüsselwort export das das seperate Übersetzungsmodell auch für Templates möglich macht. Derzeit gibt es aber so gut wie keinen Compiler (neben VC++7.1) der dies unterstützt bzw. richtig unterstützt.
Ein Template in 2 Dateien würde dann so aussehen:
Code: |
// foobar.h
export template <class T> class foobar
{
public:
unsigned int func (void);
// [...]
};
// foobar.cpp
#include "foobar.h"
template <class T> unsigned int foobar::func (void)
{
// [...]
return 0;
} |
Solange nicht jeder Compiler diese Technik unterstützt, sollte man Template- sowie Inlineimplementierungen in eine Headerdatei schreiben, viele bezeichen eine Splittung von Templates und Inline sogar als "Unschön". _________________ https://jonathank.de/games/ |
|