Ten kod kompiluje i działa zgodnie z oczekiwaniami (rzuca w czasie wykonywania, ale nie szkodzi):C++ szablonu błąd kompilacji: Oczekuje podstawowej wyrażenie przed „>” żeton
#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;
}
ale jak tylko dodam szablony i zmienić prototyp foo
w
template<class ptree>
void foo(ptree &pt)
otrzymuję błąd w GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
, ale bez błędów z MSVC++! Błąd znajduje się w zaznaczonej linii <---
. I znowu, jeśli zmienię linię problem na
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
znika błąd (problem jest w wyraźnej <std::string>
).
Boost.PropertyTree wymaga zwiększenia> = 1,41. Pomóż mi zrozumieć i naprawić ten błąd.
Zobacz Templates: template function not playing well with class’s template member function - podobne pytanie popularny zawierające inne dobre odpowiedzi i wyjaśnień.
pokrewne: http://stackoverflow.com/questions/1682844/ szablony-szablon-funkcja-nie-gra-dobrze-z-klasy-szablon-członek-functi/1682885 (duplikat?) – GManNickG
Tak, jest to duplikat. Dziękuję za pomoc! –