Retourner au contenu associé (entrée de forum : Problème de templates: undefined reference)
Posté par Gof (site web personnel) le 17 décembre 2012 à 16:28. 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
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# 3 solutions
Posté par Gof (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
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
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