-1

ヘッダーファイルを単にインクルードすると、boost::asio 内から奇妙なエラーが発生します。これには、変換エラーが発生するasio.hppまで他のヘッダーが含まれます。win_static_mutex.ipp

-std=gnu++11 コンパイラ フラグを指定して GCC 4.7 で MinGW を使用します ( c++11 ではなく gnu++11 の理由を参照してください) エラーはブースト 1.49、1.50、および 1.51 (現在) で発生します。

完全なエラーは次のようになります。

In file included from boost1.49/boost/asio/detail/win_static_mutex.hpp:71:0,
                 from boost1.49/boost/asio/detail/static_mutex.hpp:23,
                 from boost1.49/boost/asio/detail/impl/signal_set_service.ipp:24,
                 from boost1.49/boost/asio/detail/signal_set_service.hpp:210,
                 from boost/asio/signal_set_service.hpp:19,
                 from boost/asio/basic_signal_set.hpp:24,
                 from boost/asio.hpp:26,
                 from MyCode\Client.cpp:3:
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp: In member function 'int boost::asio::detail::win_static_mutex::do_init()':
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'const wchar_t*' to 'size_t {aka unsigned int}' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:51:63: error: invalid conversion from 'unsigned int' to 'const wchar_t*' [-fpermissive]
boost1.49/boost/asio/detail/impl/win_static_mutex.ipp:53:10: warning: declaration of 'mutex' shadows a global declaration [-Wshadow]

冒頭で述べたように、コードasio.hppで行うことはヘッダーを含めることだけです。

#include <boost/asio.hpp>

ブーストの ファイルの43 ~ 53 行目は次のwin_static_mutex.ippとおりです (51 行目にマークを付けました)。

  using namespace std; // For sprintf.
  wchar_t mutex_name[128];
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
  swprintf_s(mutex_name, 128,
#else // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
  swprintf(mutex_name,
#endif // BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
      L"asio-58CCDC44-6264-4842-90C2-F3C545CB8AA7-%u-%p",
      static_cast<unsigned int>(::GetCurrentProcessId()), this); // line 51

  HANDLE mutex = ::CreateMutexW(0, TRUE, mutex_name);

私が定義しなければならない定義やその他のコンパイラフラグがありますか、それともboostで直接何かを変更する必要がありますか、それともMinGWで変更する必要があるものですか?

4

2 に答える 2

0

醜い「解決策」の 1 つは、コンパイラ フラグを設定すること-fpermissiveです。現時点では、この「解決策」のみが表示され、ブーストが GCC 4.7.0 に再び追いつくまで待つ必要があります...

于 2012-09-13T12:54:20.457 に答える
0

Boostのエラーのようです。Boost を新しいリリース (1.51 が利用可能) にアップデートしてみて、そこで修正されることを期待できます。そうでない場合は、バグとして報告する必要があります。

于 2012-09-13T11:00:59.540 に答える