type - Error de compilación de plantilla C++: expresión primaria esperada antes del token ''>''
expected unqualified-id before if (1)
Necesitas hacer:
std::cout << pt.template get<std::string>("path");
Use la template
en la misma situación que typename
, excepto para los miembros de la plantilla en lugar de los tipos.
(Es decir, dado que pt::get
es un miembro de plantilla que depende de un parámetro de plantilla, debe decirle al compilador que es una plantilla).
Este código se compila y funciona como se espera (se ejecuta en tiempo de ejecución, pero no importa):
#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;
}
Pero tan pronto como agregue plantillas y cambie el prototipo foo
en
template<class ptree>
void foo(ptree &pt)
Me sale un error en GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
¡pero no hay errores con MSVC ++! El error está en la línea marcada <---
. Y nuevamente, si cambio la línea del problema a
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
el error desaparece (el problema está en <std::string>
explícito).
Boost.PropertyTree requiere Boost> = 1.41. Por favor, ayúdame a comprender y corregir este error.
Consulte Plantillas: la función de plantilla no funciona bien con la función de miembro de plantilla de la clase : una pregunta popular similar que contiene otras buenas respuestas y explicaciones.