• # 3 solutions

    Posté par (site web personnel) . En réponse au message Problème de templates: undefined reference. Évalué à 1.

    Comme dit plus haut le compilateur doit être capable d'instancier les template pour les type particuler.
    Je propose 3 solutions:

    1- Comme déjà proposé, mettre l'implémentation dans le fichier entête (URI.hpp)

    2- Si tu sais à l'avance quels type seront utilisé, tu peux faire une instentiation explicite dans URI.cpp

    template std::pair<std::string, std::string> URI::splitScheme (const std::string & str);
    template std::pair<std::wstring, std::wstring> URI::splitScheme (const std::wstring & str);
    
    

    Cela dit au compilateur de générer le code pour ton template pour les type donnés lors de la compilation de URI.cpp, et permettra au linkeur de les trouver lors de l'édition des liens.

    3- export template: dans ton header rajoute le mot clef export

    export template<class STR> std::pair<STR, STR> splitScheme (const STR & str);
    
    

    Mais oublie cette dernière technique, car quasiment aucun compilateur ne supporte ce mot clef. Et il a d'ailleurs été retiré en C++11:
    http://en.wikipedia.org/wiki/C++#Exported_templates