【问题标题】:Can't get_value() from Boost property tree map value in VS2019无法从 VS2019 中的 Boost 属性树映射值中获取值()
【发布时间】: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 中的一些开关或配置?

【问题讨论】:

    标签: boost


    【解决方案1】:

    在意识到VS2019默认使用C++14后,我自己找到了答案。指定的行:“auto& [k, v] : pt”需要一些 C++17 特性。所以去项目设置 --> 配置属性 --> 常规 --> C++ 语言标准 --> 更改为 ISO C++17 标准 (/std:c++17)。

    然后代码就可以正常工作了

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 2018-11-28
      • 2017-07-26
      相关资源
      最近更新 更多