使用asio
独立库时,我遇到了一个问题。我确定我的问题是我已经忘记/忽视的愚蠢事物,但是我无法终生弄清楚它是什么。也许你可以帮我。
根据asio文档,我应该能够通过执行asio::ip::tcp::resolver resolver(io);
创建解析器对象,其中io
是先前定义的asio::io_service
对象。我在类内部执行此操作,并且我了解必须使用类初始化程序列表。但是,这是我遇到的问题。我已经在下面复制并粘贴了我的代码,我相信我可以正确执行此操作,但是也许您可以告诉我。
#pragma once
#include <asio.hpp>
class asiostuff
{
private:
asio::io_service io;
asio::ip::tcp::resolver resolver;
asio::ip::tcp::resolver::query query;
asio::ip::tcp::socket socket;
public:
asiostuff()
: resolver(io)
{ //<---- red squiggly line says no default constructor exists
}
};
现在,我认为我做对了,但是当我尝试构建此错误时,MSVC输出C2512错误(没有适当的默认构造函数可用)。当我做
asio::io_service io;
asio::ip::tcp::resolver resolver(io);
在类之外,它可以正常编译,这向我表明我可能在做类初始化列表错误。在初始化
asio::ip::tcp::resolver
对象之前,我应该初始化任何对象吗?作为参考,我在发布模式下使用针对x64的MSVC 2015编译。
编辑:经过一些额外的测试,我发现当我注释掉
asio::ip::tcp::resolver::query query;
和asio::ip::tcp::socket socket;
时,程序将再次编译。为什么? 最佳答案
Mikel F在评论中解决了这个问题。
查询没有默认构造函数,需要正确构造。
MSVC不够聪明,无法具体地告诉我,我也没有足够的经验来知道。
关于c++ - Asio解析器不将io_service对象作为参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41273168/