Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template Function Definition

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.05.2011, 23:33 Uhr
Lensflare



Hallo.

Ich habe ein merkwürdiges Template Problem und hoffe ihr könnt mir helfen:

Der folgende Code wirft bei MS VisualStudio 9 und bei cygwin (g++) einen Compilerfehler.

A.h

C++:
#ifndef LENSFLARE_A_H
#define LENSFLARE_A_H

class A {
public:
    template <typename T> void Test(const T& v);
};

#endif //LENSFLARE_A_H



A.cpp

C++:
#include "A.h"

template <typename T> void A::Test(const T& v) {

}



main.cpp

C++:
#include <iostream>
#include "A.h"

int main() {
    A a;
    a.Test(5);

    std::cin.ignore();
    return 0;
}



Wenn ich die Funktion aber nicht in der cpp Datei, sondern in der h Datei, direkt unter der Klasse definiere, dann gibts keine Fehler:

A.h

C++:
#ifndef LENSFLARE_A_H
#define LENSFLARE_A_H

class A {
public:
    template <typename T> void Test(const T& v);
};

template <typename T> void A::Test(const T& v) {

}

#endif // LENSFLARE_A_H



Warum? Und wie kann ich die Template Funktion fehlerfrei in der cpp Datei definieren?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2011, 07:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

der Fehler ist logisch: ein Template ist keine Klasse, sondern nur eine Vorlage. d.h der Compiler braucht zur Compilezeit die komplette Vorlage.
Daher muss man Templates komplett im Header definieren. Es gibt dann einige, die ausnahmsweise (!!!) die template-cpp-datei im header mit inkludieren um trotzdem so eine Trennung zu erreichen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2011, 17:47 Uhr
Lensflare



Das ist ja ärgerlich
Danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: