2013-06-03 59 views
2

我對C++很陌生,所以我試圖弄清楚到底發生了什麼。我試圖讓(別人的)代碼編譯。它使用mingw運行良好,但我也在交叉編譯到嵌入式系統(TS-7800)上並且遇到編譯器錯誤。它在我看來不知何故mingw做一些自動匹配與const,交叉編譯器沒有,但我不知道發生了什麼。編譯器特定的錯誤:無法與const參數匹配函數

下面的代碼:

typedef ::zmq::context_t ZeroMQContextType; 
typedef boost::shared_ptr<ZeroMQContextType> ZeroMQContextHandleType; 
typedef ::zmq::socket_t ZeroMQSocketType; 
typedef boost::shared_ptr<ZeroMQSocketType> ZeroMQSocketHandleType; 

SocketFactory::ZeroMQSocketHandleType SocketFactory::createZmqSocket(
    ZeroMQContextHandleType const & contextHandle, int const & zmqSocketType) { 

    ZeroMQSocketHandleType socketHandle; 

    switch (zmqSocketType) { 
    case ZMQ_PUB: 
     socketHandle = boost::make_shared<ZeroMQSocketType>(*contextHandle, ZMQ_PUB); 
     // other stuff 

    // etc ... 
    } 
return socketHandle; 

} 

而我得到的錯誤:

/path/include/boost/smart_ptr/make_shared_object.hpp: In function `typename boost::detail::sp_if_not_array<T>::type boost::make_shared(const A1&, const A2&) [with T = zmq::socket_t, A1 = zmq::context_t, 
SocketFactory.cpp:42: instantiated from here 
/path/include/boost/smart_ptr/make_shared_object.hpp:743: error: no matching function for call to `zmq::socket_t::socket_t(const zmq::context_t&, const int&)' 
/path/include/zmq.hpp:395: note: candidates are: zmq::socket_t::socket_t(const zmq::socket_t&) 
/path/include/zmq.hpp:278: note:     zmq::socket_t::socket_t(zmq::context_t&, int) 

我試圖從功能刪除的const S,但看起來他們得到補充權當傳遞參數到make_shared時返回。

  1. 有人可以向我解釋這個錯誤是怎麼回事?爲什麼mingw對這段代碼沒有問題? (我相信它在VS10和標準gcc上也能很好地工作)。
  2. 如果沒有一個好的解釋,我該如何解決這個問題,並轉移到下一個錯誤?

謝謝!

回答

相關問題