And*_*w T 35 c++ gcc boost compiler-errors visual-c++
此代码编译并按预期工作(它在运行时抛出,但没关系):
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是只要我添加模板并将foo
原型更改为
template<class ptree>
void foo(ptree &pt)
Run Code Online (Sandbox Code Playgroud)
我在GCC中遇到错误:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
Run Code Online (Sandbox Code Playgroud)
但MSVC++没有错误!错误在标记的行中<---
.再次,如果我将问题线改为
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
Run Code Online (Sandbox Code Playgroud)
错误消失(问题是明确的<std::string>
).
Boost.PropertyTree需要Boost> = 1.41.请帮助我理解并修复此错误.
请参阅模板:模板功能与类的模板成员函数不兼容 - 一个类似的流行问题包含其他好的答案和解释.
GMa*_*ckG 59
你需要这样做:
std::cout << pt.template get<std::string>("path");
Run Code Online (Sandbox Code Playgroud)
除了模板成员而不是类型之外template
,在相同的情况下使用typename
.
(也就是说,由于pt::get
是依赖于模板参数的模板成员,因此您需要告诉编译器它是一个模板.)
归档时间: |
|
查看次数: |
15667 次 |
最近记录: |