Ce code compile et fonctionne comme prévu (il jette à l'exécution, mais jamais l'esprit):C++ erreur de compilation du modèle: l'expression primaire attendue avant « > » jeton
#include <iostream>
#include <boost/property_tree/ptree.hpp>
void foo(boost::property_tree::ptree &pt)
{
std::cout << pt.get<std::string>("path"); // <---
}
int main()
{
boost::property_tree::ptree pt;
foo(pt);
return 0;
}
Mais dès que j'ajouter des modèles et changer le prototype foo
dans
template<class ptree>
void foo(ptree &pt)
Je reçois une erreur dans GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
mais pas d'erreurs avec MSVC++! L'erreur est dans la ligne marquée <---
. Et encore, si je change la ligne de problème dans
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
l'erreur disparaît (le problème est explicite <std::string>
).
Boost.PropertyTree nécessite Boost> = 1,41. S'il vous plaît, aidez-moi à comprendre et corriger cette erreur.
Voir Templates: template function not playing well with class’s template member function - une même question populaire contenant d'autres bonnes réponses et des explications.
connexes: http://stackoverflow.com/questions/1682844/ templates-template-function-not-playing-well-avec-classs-template-member-functi/1682885 (Dupliquer?) – GManNickG
Oui, c'est un doublon. Merci de votre aide! –