无法从 VS2019 中的 Boost 属性树映射值中获取值()
Posted
技术标签:
【中文标题】无法从 VS2019 中的 Boost 属性树映射值中获取值()【英文标题】:Can't get_value() from Boost property tree map value in VS2019 【发布时间】:2021-05-28 16:55:11 【问题描述】:我点击此链接提取 Boost 属性树值。
Extracting STL Map from Boost Property Tree
我没有安装库 fmt,所以只是从原始代码修改了输出函数。该代码在 g++ 中运行良好。但是在VS2019中测试时,一直弹出“标识符”未定义”的错误。
#include <boost/property_tree/ptree.hpp>
#include <map>
#include <iostream>
using boost::property_tree::ptree;
int main()
ptree pt;
pt.put("keyA", "valueA-1");
pt.put("keyB", "valueB");
pt.put("keyC", "valueC");
pt.add("keyA", "valueA-2"); // not replacing same key
std::map<std::string, ptree> m(pt.begin(), pt.end());
std::multimap<std::string, ptree> mm(pt.begin(), pt.end());
std::map<std::string, std::string> dict;
for (auto& [k,v]: pt) // THIS LINE HAS ERROR!
dict.emplace(k, v.get_value<std::string>());
for (auto elem : dict)
std::cout << elem.first << " " << elem.second << std::endl;
return 0;
我没有看到这个指定的行有什么问题,所以我一定错过了 VS2019 中的一些开关或配置?
【问题讨论】:
【参考方案1】:在意识到VS2019默认使用C++14后,我自己找到了答案。指定的行:“auto& [k, v] : pt”需要一些 C++17 特性。所以去项目设置 --> 配置属性 --> 常规 --> C++ 语言标准 --> 更改为 ISO C++17 标准 (/std:c++17)。
然后代码就可以正常工作了
【讨论】:
以上是关于无法从 VS2019 中的 Boost 属性树映射值中获取值()的主要内容,如果未能解决你的问题,请参考以下文章