2011-02-07 145 views
3

我已经创建了一个单独的项目,以连接我的服务器组件到客户端使用TCP/IP与boost :: asio。我首先单独创建并测试了这个项目并测试了这些类,一切正常。错误编译项目与升压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; 
}; 
+0

检查boost_system和boost_regex库是否已链接到 – Arunmu 2011-02-07 08:29:10

回答

3

Windows SDK通过使用预处理器#define s激活各种操作系统特定版本的附加API调用。这使您可以构建应用程序的任何版本的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

你必须做_WIN32_WINNT的#define右版本号,以避免该错误该类每this线程。