asio socket,在类声明中,范围问题

时间:2014-12-08 10:46:15

标签: boost boost-asio

我希望有一个类,我在其中初始化并打开一个tcp套接字,但我想通过调用该类的方法重复写入套接字,而不必每次都重新建立连接。

我的代码如下。我在编码块下面粘贴了编译时错误。 该方法无法查看在构造函数中初始化的套接字。似乎是一个简单的C ++“范围”问题,但打败了我!

#include <ctime>
#include <iostream>
#include <string>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

using asio::ip::udp;
using asio::ip::tcp;

class rpcClass {
    char sendBuffer[16];
    asio::ip::tcp::endpoint epdPt;
    asio::io_service io_service;
    asio::ip::tcp::endpoint endPt;

public:
    rpcClass () {                // constructor
    asio::ip::tcp::socket socketTCP(io_service);
    strcpy (sendBuffer, "*Constructor*\n");
    endPt = asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"),\
         boost::lexical_cast<int>(5004));
    socketTCP.connect(endPt);
    socketTCP.write_some (asio::buffer(sendBuffer));
    };

    void sendRPCData (void) {    //send data when called from main()
        strcpy (sendBuffer, "rpcData\n");
        socketTCP.write_some (asio::buffer(sendBuffer));
    };
};


int main(void)  {

    rpcClass    rpc; // I WANT THE rpc OBJECT TO SEND DATA
    rpc.sendRPCData ();  // ONLY WHEN THIS METHOD IS CALLED
    return (0);
}

这是错误输出(Eclipse)

rpc-class.cpp: In member function ‘void rpcClass::sendRPCData()’:
rpc-class.cpp: error: ‘socketTCP’ was not declared in this scope

非常感谢您的帮助! -pn

1 个答案:

答案 0 :(得分:1)

您已将socketTCP声明为构造函数中的局部变量,而不是该类的成员变量。

这意味着您无法在其他功能中使用它。

大概你想要声明一个成员变量,并在构造函数中初始化它而不是局部变量。