jj601 发表于 2009-6-7 17:53:45

使用ACE Reactor框架处理事件及多个I/O流源代码 报错

class ClientAcceptor : public ACE_Event_Handler
{
public:
    virtual ~ClientAcceptor(void)
    {
      this->handle_close(ACE_INVALID_HANDLE, 0);
    }
    int open(const ACE_INET_Addr& listen_addr)
    {
      if (this->acceptor_.open(listen_addr, 1) == -1)
            ACE_ERROR_RETURN((LM_ERROR,
                            ACE_TEXT("%p\n"),
                            ACE_TEXT("acceptor.open")),
                            -1);

      //针对接受事件向反应器登记
      return this->reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK);
    }
protected:
    ACE_SOCK_Acceptor acceptor_;
public:
    // Get this handler's I/O handle.
    virtual ACE_HANDLE get_handle(void) const
    {
      return this->acceptor_.get_handle();
    }
    // Called when a connection is ready to accept.
    virtual int handle_input(ACE_HANDLE fd)
    {
      //ClientService* client;
      //ACE_NEW_RETURN(client, ClientService, -1);
      ClientService *client = new ClientService();
      auto_ptr<ClientService> p(client);//这个auto_ptr应该具有引用计数的功能

      if (this->acceptor_.accept(client->peer()) == -1)
            return -1;
      p.release();
      client->reactor(this->reactor());
      if (client->open() == -1)
            client->handle_close(ACE_INVALID_HANDLE, 0);
      return 0;
    }
    // Called when this handler is removed from the ACE_Reactor.
    virtual int handle_close(ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
    {
      if (this->acceptor_.get_handle() != ACE_INVALID_HANDLE)
      {
            ACE_Reactor_Mask m = ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL;
            this->reactor()->remove_handler(this, m);
            this->acceptor_.close();
      }
      return 0;
    }
};

原帖在http://blog.csdn.net/bingozq/archive/2008/03/27/2222417.aspx
报的错有:
错误        1        error C2146: 语法错误 : 缺少“;”(在标识符“acceptor_”的前面)        d:\我的文档\桌面\dfg\dfg\df.cpp        21       
错误        2        error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int        d:\我的文档\桌面\dfg\dfg\df.cpp        21       
错误        3        error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int        d:\我的文档\桌面\dfg\dfg\df.cpp        21       
错误        4        error C2039: “acceptor_”: 不是“ClientAcceptor”的成员        d:\我的文档\桌面\dfg\dfg\df.cpp        28       
错误        5        error C2228: “.open”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        28       
错误        6        error C2039: “acceptor_”: 不是“ClientAcceptor”的成员        d:\我的文档\桌面\dfg\dfg\df.cpp        41       
错误        7        error C2228: “.get_handle”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        41       
错误        8        error C2065: “ClientService”: 未声明的标识符        d:\我的文档\桌面\dfg\dfg\df.cpp        48       
错误        9        error C2065: “client”: 未声明的标识符        d:\我的文档\桌面\dfg\dfg\df.cpp        48       
错误        10        error C2061: 语法错误 : 标识符“ClientService”        d:\我的文档\桌面\dfg\dfg\df.cpp        48       
错误        11        error C2065: “auto_ptr”: 未声明的标识符        d:\我的文档\桌面\dfg\dfg\df.cpp        49       
错误        12        error C3861: “p”: 找不到标识符        d:\我的文档\桌面\dfg\dfg\df.cpp        49       
错误        13        error C2039: “acceptor_”: 不是“ClientAcceptor”的成员        d:\我的文档\桌面\dfg\dfg\df.cpp        51       
错误        14        error C2228: “.accept”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        51       
错误        15        error C2227: “->peer”的左边必须指向类/结构/联合/泛型类型        d:\我的文档\桌面\dfg\dfg\df.cpp        51       
错误        16        error C2228: “.release”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        53       
错误        17        error C2227: “->reactor”的左边必须指向类/结构/联合/泛型类型        d:\我的文档\桌面\dfg\dfg\df.cpp        54       
错误        18        error C2227: “->open”的左边必须指向类/结构/联合/泛型类型        d:\我的文档\桌面\dfg\dfg\df.cpp        55       
错误        19        error C2227: “->handle_close”的左边必须指向类/结构/联合/泛型类型        d:\我的文档\桌面\dfg\dfg\df.cpp        56       
错误        20        error C2039: “acceptor_”: 不是“ClientAcceptor”的成员        d:\我的文档\桌面\dfg\dfg\df.cpp        62       
错误        21        error C2228: “.get_handle”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        62       
错误        22        error C2039: “acceptor_”: 不是“ClientAcceptor”的成员        d:\我的文档\桌面\dfg\dfg\df.cpp        66       
错误        23        error C2228: “.close”的左边必须有类/结构/联合        d:\我的文档\桌面\dfg\dfg\df.cpp        66       


怎么调都不对麻烦大家看看

winston 发表于 2009-6-8 15:12:49

ACE_SOCK_Acceptor
包含:
#include <SOCK_Acceptor.h>
页: [1]
查看完整版本: 使用ACE Reactor框架处理事件及多个I/O流源代码 报错