Я столкнулся с проблемой при использовании автономной библиотеки asio
. Я уверен, что моя проблема - это что-то глупое, что я забыл/забыл, но я не могу на всю жизнь понять, что это такое. Возможно, вы можете мне помочь.Asio resolver не принимает объект io_service в качестве аргумента
Согласно документации 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
?
Для справки, я использую MSVC 2015 для компиляции x64 в режиме деблокирования.
EDIT: После некоторых дополнительных испытаний, я обнаружил, что, когда я закомментировать asio::ip::tcp::resolver::query query;
и asio::ip::tcp::socket socket;
программа компилируется снова. Зачем?
Похоже, что у запроса может не быть конструктора по умолчанию. –
Ах. Это не так, я не понимал, что это вызовет это. Спасибо! – Mynameisspam1