2014-12-08 2 views
-1

내부에 클래스를 초기화하고 TCP 소켓을 열고 싶습니다.하지만 그 클래스의 메소드를 호출 할 때만 반복해서 쓰고 싶습니다. 매번 연결을 다시 설정하십시오.asio 소켓, 클래스 선언 내부, 범위 문제

내 코드는 다음과 같습니다. 코드 블록 아래에 여기에 붙여 넣은 컴파일 시간 오류가 발생합니다. 메서드는 생성자에서 초기화 된 소켓을 볼 수 없습니다. 간단한 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); 
} 

오류 출력 (이클립스)

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

감사 도와 줘서 많이입니다! -pn

답변

1

socketTCP을 클래스의 멤버 변수가 아닌 생성자의 로컬 변수로 선언했습니다.

다른 기능에서는 사용할 수 없습니다.

아마 당신은 멤버 변수를 선언하고 로컬 변수 대신 생성자에서이를 초기화하려고했습니다.