无法用两个包装不同下一层的ssl_stream编译代码

问题描述 投票:1回答:1

我想了解为什么在创建两个ssl_streams包裹tcp层的不同对象时,出现以下编译错误:

------ Build started: Project: test, Configuration: Debug x64 ------
>Microsoft (R) C/C++ Optimizing Compiler Version 19.22.27905 for x64
>Copyright (C) Microsoft Corporation.  All rights reserved.
>cl /c /I"D:\workspace\openssl-static\openssl-OpenSSL_1_1_1a\openssl-OpenSSL_1_1_1a\include" /ID:\workspace\boost\VS19\boost_1_70_0 /Zi /W3 /WX- /diagnostics:column /Od /Ob0 /D WIN32 /D _WINDOWS /D _WIN32_WINNT=0x0600 /D _SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING /D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"test.dir\Debug\\" /Fd"test.dir\Debug\vc142.pdb" /Gd /TP /errorReport:prompt D:\workspace\main.cpp
>main.cpp
>D:\workspace\boost\VS19\boost_1_70_0\boost/beast/ssl/ssl_stream.hpp(655,5): error C2995:  'void boost::beast::teardown(boost::beast::role_type,boost::beast::ssl_stream<NextLayer> &,boost::system::error_code &)': function template has already been defined
>D:\workspace\boost\VS19\boost_1_70_0\boost/beast/ssl/ssl_stream.hpp(655): message :  see declaration of 'boost::beast::teardown'
>D:\workspace\main.cpp(12): message :  see reference to class template instantiation 'boost::beast::ssl_stream<boost::asio::ip::tcp::socket>' being compiled
>D:\workspace\boost\VS19\boost_1_70_0\boost/beast/ssl/ssl_stream.hpp(668,5): error C2995:  'void boost::beast::async_teardown(boost::beast::role_type,boost::beast::ssl_stream<NextLayer> &,TeardownHandler &&)': function template has already been defined
>D:\workspace\boost\VS19\boost_1_70_0\boost/beast/ssl/ssl_stream.hpp(668): message :  see declaration of 'boost::beast::async_teardown'
>Done building project "test.vcxproj" -- FAILED.

如果两个流都具有相同的模板参数(即,两个都具有boost :: beast :: tcp_streamboost :: asio :: ip :: tcp :: socket],则所有错误都会消失)> )。

#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/ssl/context.hpp>
#include <boost/beast/core/tcp_stream.hpp>
#include <boost/beast/ssl/ssl_stream.hpp>

int main() {
  boost::asio::io_context ioc;
  boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23_client);
  ctx.set_default_verify_paths();
  boost::beast::ssl_stream<boost::beast::tcp_stream> stream_1(ioc, ctx);
  boost::beast::ssl_stream<boost::asio::ip::tcp::socket> stream_2(ioc, ctx);
}

我想了解这是错误还是所需的行为。如果是第二个,如果有人向我解释原因,那将是很棒的。另外,我想更好地了解在什么情况下使用tcp_stream以及在哪个套接字中值得使用。

[我想了解为什么在创建两个ssl_streams来包装tcp层的不同对象时,出现以下编译错误:------构建开始:项目:测试,配置:调试...

c++ ssl boost boost-asio sslstream
1个回答
0
投票

我认为

© www.soinside.com 2019 - 2024. All rights reserved.