unqualified type significa que expected español conversion before c++ visual-c++ gcc boost compiler-errors

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.