2014-03-06 113 views
0

我目前正在嘗試瞭解boost :: asio-API。在我的課程之一,我用一個boost :: shared_ptr的引用一個io_service對象以這種方式:根據該boost :: shared_ptr boost :: asio聲明錯誤:io_service

class myClass : public boost::asio::serial_port 
{ 
public: 
    myClass(std::string Port); 

private: 
    boost::shared_ptr<boost::asio::io_Service> _io_service_ptr; 
}; 

和實現是:

myClass::myClass(std::string Port) : _io_service_ptr(new boost::asio::io_service), 
boost::asio::serial_port(*_io_service_ptr, Port) 
{ 
    //do stuff 
} 

當我這樣做,我得到的錯誤:斷言失敗! px!= 0 [...]

當對其他boost :: asio對象(如boost :: asio :: io_service :: work(service))使用相同的模式時,它可以正常工作。我對io_service做了什麼錯誤?

回答

2

基類在成員之前被初始化,所以io_service直到你試圖解引用未初始化的指針來傳遞引用到基類爲止。

但是從serial_port得到似乎很奇怪;爲什麼不使用聚合呢?確保服務在使用它的任何東西之前宣稱:

class myClass { 
public: 
    myClass(std::string port) : serial_port(io_service, port) {} 

    // public interface to interact with the serial port and whatever else 

private: 
    boost::asio::io_service io_service; // or a shared pointer if there's a good reason 
    boost::asio::serial_port serial_port; 
}; 

它也可能是你想要與衆多對象共享一個服務,所以也許它不應該被這個類在所有擁有:

class myClass { 
public: 
    myClass(boost::asio::io_service & io_service, std::string port) : 
     serial_port(io_service, port) 
    {} 

    // public interface to interact with the serial port and whatever else 

private: 
    boost::asio::serial_port serial_port; 
}; 
+0

當然他們是...非常感謝。甚至沒有想到那^^ – FreddyKay

相關問題