C++ template compilation error: expected primary-expression before ‘gt;’ token(C++ 模板编译错误:“gt;标记之前的预期主表达式)
问题描述
此代码编译并按预期工作(它在运行时抛出,但没关系):
This code compiles and works as expected (it throws at runtime, but never mind):
#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
原型更改为
But as soon as I add templates and change the foo
prototype into
template<class ptree>
void foo(ptree &pt)
我在 GCC 中遇到错误:
I get an error in GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
但 MSVC++ 没有错误!错误在标记的行 <---
中.再一次,如果我将问题行更改为
but no errors with MSVC++! The error is in the marked line <---
. And again, if I change the problem line into
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
错误消失(问题出在显式
).
the error disappears (the problem is in explicit <std::string>
).
Boost.PropertyTree 需要 Boost >= 1.41.请帮助我理解并修复此错误.
Boost.PropertyTree requires Boost >= 1.41. Please help me to understand and fix this error.
参见模板:模板函数不能很好地与类的模板成员函数配合使用——一个类似的流行问题,包含其他好的答案和解释.
See Templates: template function not playing well with class’s template member function — a similar popular question containing other good answers and explanations.
推荐答案
你需要做的:
std::cout << pt.template get<std::string>("path");
在与 typename
相同的情况下使用 template
,除了模板成员而不是类型.
Use template
in the same situation as typename
, except for template members instead of types.
(也就是说,由于 pt::get
是模板成员依赖模板参数,你需要告诉编译器它是一个模板.)
(That is, since pt::get
is a template member dependent on a template parameter, you need to tell the compiler it's a template.)
这篇关于C++ 模板编译错误:“>"标记之前的预期主表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++ 模板编译错误:“>"标记之前的预期主表达式
基础教程推荐
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01