gpt4 book ai didi

c++ - Asio 解析器不将 io_service 对象作为参数

转载 作者:行者123 更新时间:2023-11-28 01:55:42 24 4
gpt4 key购买 nike

我在使用 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 对象之前,有没有我应该初始化的对象?

作为引用,我在 Release模式下使用 MSVC 2015 编译 x64。

编辑:经过一些额外的测试,我发现当我注释掉 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com