在类头文件中声明提升asio套接字,接受器和端点

时间:2013-10-21 17:39:48

标签: c++ boost boost-asio shared-ptr

我有一个使用boost asio制作的TCP / IP服务器,它包含在一个类中。现在我想在类头文件中声明套接字,eindpoint和acceptor,这样我就可以创建使用套接字的成员函数。服务器现在在类构造函数中运行。我尝试使用如下的初始化列表:

CommunicationModuleTCPIP::CommunicationModuleTCPIP(bool Server,
                                               string IPAdress,
                                               int PortNumber)
 : Sock(new boost::asio::ip::tcp::socket(IOService));
{
// Constructor code

但是这会给编译错误。 Sock在标题中声明如下:

SmartSocket Sock;

SmartSocket是一个共享指针,按以下方式定义。

typedef boost::shared_ptr<boost::asio::ip::tcp::socket> SmartSocket;

有人能告诉我是否可以在头文件中声明一个套接字,一个接受者和端点并初始化这些对象?

欢迎任何建议!

更新

下面是te类头文件代码和构造函数代码:

包含端点,套接字和接受器声明的头文件:

public:

// Constructor and destructor
CommunicationModuleTCPIP(bool   Server,
                         string IPAdress,
                         int PortNumber);
~CommunicationModuleTCPIP();

int Connect();
int Disconnect();
int SendData(SmartSocket sock);
int RecieveData(SmartSocket sock);
int Send(SmartSocket Sock);
int Recieve(SmartSocket sock);
int CheckConnection();

char SendBuffer[20];
char RecvBuffer[20];

SmartSocket Sock;
tcp::endpoint Endpoint;
boost::asio::ip::tcp::acceptor Acceptor;

构造函数,在注释中是我在构造函数中创建它们时的套接字,端点和接受器。这有效,但我想让这些对象成为类的一部分,以便我可以在代码的其他部分的成员函数中使用它们(如果可能的话?)。

CommunicationModuleTCPIP::CommunicationModuleTCPIP(bool Server,
                                               string IPAdress,
                                               int PortNumber){
:Endpoint(ip::address::from_string(IPAdress),PortNumber),
 Acceptor(IOService, Endpoint),
 Sock(new boost::asio::ip::tcp::socket(IOService)

if(Server){

    cout << "Setting up server" << endl;

    //ip::tcp::endpoint Endpoint(ip::address::from_string(IPAdress),PortNumber);

    // Create acceptor
    //boost::asio::ip::tcp::acceptor Acceptor(IOService, Endpoint);

    // Create socket
    //SmartSocket Sock(new boost::asio::ip::tcp::socket(IOService));

    cout << "Before accept..." << endl;

     // Waiting for client
     Acceptor.accept(*Sock);

    cout << "Server set up" << endl;

 }

我得到的编译错误如下:

\ CommunicationModuleTCPIP.cpp:6:30:fout:没有匹配函数来调用'boost :: asio :: basic_socket_acceptor :: basic_socket_acceptor()'

fout:在':'标记之前预期的primary-expression .. \ CommunicationModuleTCPIP.cpp:7:2:fout:expect';'before':'token .. \ CommunicationModuleTCPIP.cpp:199:2:fout:输入结束时预期'}'

C:\ boost_1_54_0 / boost / asio / error.hpp:244:45:让op:'boost :: asio :: error :: system_category'已定义但未使用[-Wunused-variable] C:\ boost_1_54_0 / boost / asio / error.hpp:246:45:让op:'boost :: asio :: error :: netdb_category'已定义但未使用[-Wunused-variable] C:\ boost_1_54_0 / boost / asio / error.hpp:248:45:让op:'boost :: asio :: error :: addrinfo_category'已定义但未使用[-Wunused-variable] C:\ boost_1_54_0 / boost / asio / error.hpp:250:45:让op:'boost :: asio :: error :: misc_category'已定义但未使用[-Wunused-variable]

1 个答案:

答案 0 :(得分:2)

唯一明显的错误是初始化列表末尾的流氓;

如果你删除它时仍然有错误,也许你可以发布一个小的,完整的代码示例来演示错误,以及错误本身。否则,很难猜出代码的其余部分可能在做什么。