Wieso gibt das keinen Fehler?



  • Ich habe einen Header Misc.h, in dem folgendes steht:

    template<class T> 
    void foo() {
       float f = D3DX_PI;
    }
    

    D3DX_PI ist eine #define Konstante und definiert in d3dx9math.h.

    Ich inkludiere jetzt in main.cpp als allererstes (!) Misc.h und bekomme dennoch KEINEN Compiler-Fehler. Wie kann das sein? Am Anfang von main.cpp müsste doch jetzt die Definition von foo() stehen und er meckern, dass er D3DX_PI; nicht kennt. 😕



  • Hast du das Template denn auch instanziiert? Also f<T>() mal für irgendein T aufgerufen? Erst dann dürfte der Compiler feststellen, dass das ein unbekannter Bezeichner ist.



  • Nein hatte ich nicht. Das wars wohl, Danke. 👍

    Nebenbei: Wenn ich meine Template-Funktion beispielsweise für einen int und einen float instantiiere, dann lagt er ja 2 verschiedene Funktionen an. Wo genau wird eigentlich dieser Code abgelegt?



  • Wie "wo"? Da wo der andere Code auch ist. 🙂



  • Öhm, also wenn ich in a.cpp foo<int>() habe und in b.cpp foo<float>(), dann ist in a.obj der Code zu foo<int> und in b.obj der zu foo<float>, oder?


Anmelden zum Antworten