有没有办法避免错误 C2039:"value":不是 "boost::proto" 的成员?

Is there a way to avoid error C2039: "value": Is not a member of "boost::proto"?

我正在使用 boost::network::uri::encoded() 来编码我的请求 url.But 当我构建项目时,我看到错误 "error C2039: "value": Is not a member of "boost::proto"”。其中有四个,来自 boost\proto\generate.hpp(239,20);boost\proto\generate.hpp(239,53);boost\proto\generate.hpp(248,20) );boost\proto\generate.hpp(248,53)。 这是我的测试代码:

#include <iostream>
#include <string>
#include "boost/network/uri.hpp"
using std::string;
string EncodeURL(string str)
{
    return boost::network::uri::encoded(str);
}
string DecodeURL(string str)
{
    return boost::network::uri::decoded(str);
}
int main()
{
    EncodeURL("https://test.com/a+a+a.html");
    return 0;
}

我使用 vcpkg 安装了 boostcpp-netlib。我的 IDE 是 Visual Studio Professional 2019,操作系统是 Windows 10 Professional Workstation x64 (Ver.2004)。 我想知道如何避免这些错误,或其他编码 URL 与 UNICODE 兼容的方法。

这是boost库的一个bug。可以通过将 boost 库更新到最新版本或编辑 boost\proto\generate.hpp.

来修复

编辑方式boost\proto\generate.hpp

将第 95 行更改为

#if BOOST_WORKAROUND(BOOST_MSVC, < 1800)

将第 233 行更改为

#if BOOST_WORKAROUND(BOOST_MSVC, < 1800)

这是来自 boost 库的 PR