2014-07-08 1 views
0

클래스로 선언 된 개인 멤버에 액세스 할 수 없습니다. 멤버로 부스트 소켓이있는 간단한 클래스가 있고 IP 주소를 생성자에 전달하려고합니다. 컴파일 오류.오류 C2248 클래스 '선언 :: boost :: asio :: basic_io_object <IoObjectService>

Error 2 error C2248: 'boost::asio::basic_io_object<IoObjectService>::basic_io_object' : cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>' 

그러나 std :: string ip 인수를 생성자에서 제거하면 작동합니다. 그것은

class TestConnection 
{ 
private: 
    boost::asio::ip::tcp::socket tcp_socket_; 
public: 
    TestConnection(boost::asio::io_service &io, std::string ip):tcp_socket_(io) 
    { 

    } 
    ~TestConnection() 
    { 
    } 
}; 

int main() 
{ 
     boost::asio::io_service io_service; 
     std::string test_ip = "192.168.1.10"; 
     TestConnection testconn = TestConnection(io_service, test_ip); 
} 

답변

4
를 컴파일하지 왜 어떤 생각

TestConnection testconn = TestConnection (io_service, test_ip); 당신이 실제로 사용할 수없는 TestConnection 복사 생성자를 호출하려고 위의 줄에

, tcp_socket_ 회원이 아닌 복사 가능한 때문이다. 대신 다음과 같이 그 행을 쓸 수 있습니다 :

TestConnection testconn(io_service, test_ip); 
+0

여분의 std :: string 인수를 제거하면 왜 작동하는지 알 수 있습니까? –

+0

@Pritesh Acharya, 이것은 MSVC의 비표준 확장입니다. GCC로 컴파일을 시도하면 두 경우 모두 실패합니다. –

관련 문제