ошибки компиляции проекта с boost asio - PullRequest
3 голосов
/ 07 февраля 2011

Я создал отдельный проект для подключения моего серверного компонента к клиентам, использующим TCP / IP с boost :: asio. Сначала я создал и протестировал этот проект отдельно, затем протестировал эти классы, все работало нормально.

Добавив это к моему серверному компоненту, он больше не компилируется, и я получаю следующие ошибки компилятора о коде, который даже не мой код!

   c:\Program Files\boost\boost_1_44\boost\asio\detail\impl\win_iocp_io_service.ipp(442): error C2039: 'CreateWaitableTimer' : is not a member of 'operator``global namespace'''


    c:\Program Files\boost\boost_1_44\boost\asio\detail\impl\win_iocp_io_service.ipp(442): error C3861: 'CreateWaitableTimer': identifier not found, even with argument-dependent lookup

Я понятия не имею, почему я получаю эти ошибки, я проверил все пути включения и все файлы включения в проекте.

Кто-нибудь есть какие-либо предложения относительно того, что может вызвать эти ошибки?

Заголовочный файл "tcp_server.h" включен в мой проект и является причиной появления ошибок. Это класс, определенный внутри этого файла (написанный мной)

#include "stdafx.h"

#include "tcp_connection.h" //boost shared_ptr etc included inside this file already
#include <ResolverQueueHandler.h> //Handles threaded queues for requests from client

class tcp_server
{
public:
    tcp_server::tcp_server(boost::asio::io_service& io_service, int port,boost::shared_ptr<ResolverQueueHandler> queue_handler);


private:

    void start_accept();
    void handle_accept(tcp_connection::pointer new_connection, const boost::system::error_code& error);

    boost::asio::io_service _io_service;
    boost::asio::ip::tcp::acceptor acceptor_;
    boost::shared_ptr<ResolverQueueHandler> _queue_handler;
    int _port;
};

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Windows SDK активирует дополнительные вызовы API для различных выпусков операционной системы с помощью препроцессора #define s.Это позволяет создавать приложения для любой версии Windows, в то же время предотвращая непреднамеренное создание приложения, которое не будет работать, например, в Windows 98.

::CreateWaitableTimer было добавлено одновременно с Windows 2000вышел.Вам нужно будет добавить это #define в ваши приложения - либо в общем заголовке, либо в настройках проекта для соответствующего проекта C ++:

#define _WIN32_WINNT 0x0400

Ссылки:

CreateWaitableTimer: http://msdn.microsoft.com/en-us/library/ms682492(v=vs.85).aspx

Использование заголовков Windows: http://msdn.microsoft.com/en-us/library/aa383745(v=vs.85).aspx

1 голос
/ 05 апреля 2011

За этот поток необходимо сделать #define из _WIN32_WINNT с правильным номером версии, чтобы избежать этой ошибки.

...