【发布时间】:2011-03-31 03:52:24
【问题描述】:
此代码按预期编译和工作(它在运行时抛出,但没关系):
#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;
}
但只要我添加模板并将 foo 原型更改为
template<class ptree>
void foo(ptree &pt)
我在 GCC 中遇到错误:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
但 MSVC++ 没有错误!错误在标记的行<--- 中。同样,如果我将问题行更改为
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
错误消失(问题在显式<std::string>)。
Boost.PropertyTree 需要 Boost >= 1.41。请帮助我理解并修复此错误。
请参阅 Templates: template function not playing well with class’s template member function — 一个类似的热门问题,其中包含其他好的答案和解释。
【问题讨论】:
-
是的,它是重复的。感谢您的帮助!
-
很抱歉挖掘了这个,但是如果你说这是重复的,它应该被标记为恕我直言:)
标签: c++ visual-c++ gcc boost compiler-errors