【问题标题】:asio socket, inside a class declaration, scope issueasio 套接字,在类声明中,范围问题
【发布时间】:2014-12-08 10:46:15
【问题描述】:

我希望有一个类,在其中初始化并打开一个 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

【问题讨论】:

    标签: boost boost-asio


    【解决方案1】:

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

    这意味着你不能在其他功能中使用它。

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

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2010-11-04
      • 2015-03-14
      • 2021-11-25
      相关资源
      最近更新 更多