2014-04-16 4 views
0

C#에서 C++로 일부 코드를 포팅 할 때 일반 객체 대신 void*을 사용하는 데 문제가 있습니다. 정의되지 않은 포인터를 함수의 매개 변수로 전달하려고 시도했지만 성공하지 못했습니다. 내가 매개 변수로 통과 할 때void *를 함수의 매개 변수로 사용할 수 있습니까?

In file included from StringSocket.h:16, 
       from StringSocket.cpp:8: 
ReceiveRequest.h: In member function ‘void ReceiveRequest::runCallback(std::string, ssError)’: 
ReceiveRequest.h:30: error: no match for call to ‘(ReceiveRequest::receiveCallback) (std::string&, ssError&, void*&)’ 
/home/jsander/boost/include/boost/function/function_template.hpp:761: note: candidates are: R boost::function3<R, T1, T2, T3>::operator()(T0, T1, T2) const [with R = void, T0 = std::string*, T1 = ssError&, T2 = void*] 

왜 내 void* 변수는 void*& 될 않습니다

class ReceiveRequest 
{ 
    typedef boost::function<void (std::string *message, ssError& e, void *payload) > receiveCallback; 

    public: 
    receiveCallback Callback; 
    void* payload; 

    ReceiveRequest(receiveCallback _Callback, void* _payload) 
    { 
     Callback = _Callback; 
     payload = _payload; 
    } 

    void runCallback (std::string message, ssError e) 
    { 
     Callback(message, e, this->payload); 
    } 

    ~ReceiveRequest() { } 

}; 

그리고 여기에 내가받을 오류입니다 : 여기

내 클래스에 코드? 이 문제를 해결하려면 기능을 변경하여 void*&을 사용하여 문제를 해결해야합니까?

+0

C#을 C++로 이식하는 이유는 무엇입니까? – Raptor

+0

학교 지정을 위해 – hededo

+0

내 게시물을 정리 해준 Jonathon에게 감사드립니다. – hededo

답변

4

문제는 void *이 아니며, std::string입니다. 콜백 포인터를 기대하고 있지만 일반 개체를 전달하려고합니다.

... C++에서 일반 포인터를 사용하지 않는 이유에 대한 의견입니다.

+0

그걸 고쳤어! 너는 놀랍다. – hededo

+1

@hededo Matti가 쿠키를 얻도록 정답으로 받아 들여야한다. –

관련 문제