私は C++ にかなり慣れていないので、ここで何が起こっているのかを正確に理解しようとしています。(他の誰かの) コードをコンパイルしようとしています。mingw を使用すると正常に動作しますが、組み込みシステム (TS-7800) にクロスコンパイルしていて、コンパイラ エラーが発生しています。どうにか mingw が 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)
関数から s を削除しようとしましたconst
が、 に引数を渡すとすぐに追加されるようmake_shared
です。
- 誰かがこのエラーで何が起こっているのか説明できますか? そしてなぜ mingw はこのコードに問題がないのでしょうか? (VS10および標準のgccでもうまく機能したと思います)。
- 適切な説明に失敗した場合、どうすればこの問題を修正して次のエラーに進むことができますか?
ありがとう!