4

Qt や Point Cloud Library (PCL) などのライブラリを使用して Vs 2008 で編集したプログラムがあります。

PCL には、boost を含むサードパーティ ライブラリがあります。

ただし、コンパイル後にいくつかのエラーが発生しました。

1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926): エラー C3083: 'Q_FOREACH': '::' の左側の記号はタイプ 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926): エラー C2039: 'タグ': 'ブースト' のメンバーではありません 1>C :\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926): エラー C2061: 構文エラー: 識別子 'タグ' 1>C:\Program Files\PCL 1.5.1\ 3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399): エラー C3083: 'Q_FOREACH': '::' の左側の記号は、タイプ 1>C:\Program Files\PCL 1.5 である必要があります。 1\3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399): エラー C2039: 'タグ':'ブースト' のメンバーではありません 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399): エラー C2061: 構文エラー: 識別子 'タグ' 1> C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254): エラー C3083: 'Q_FOREACH': '::' の左側の記号は型でなければなりません1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254): エラー C2039: 'タグ': 'ブースト' のメンバーではありません 1>C:\ Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254): エラー C2061: 構文エラー: 識別子 'タグ' 1>C:\Program Files\PCL 1.5.1\3rdParty\ Boost\include\boost/multi_index/random_access_index.hpp(1012): エラー C3083: 'Q_FOREACH':'::' の左側の記号は、タイプ 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/random_access_index.hpp(1012) である必要があります: エラー C2039: 'tag ': 'ブースト' のメンバーではありません

最初の問題の場合、ソース ファイル内のエラーの場所は次のとおりです。

template<typename SuperMeta,typename TagList>
inline boost::mpl::true_* boost_foreach_is_noncopyable(
  boost::multi_index::detail::random_access_index<SuperMeta,TagList>*&,
  boost::foreach::tag) // <-------------error here for the first compile error.
{
  return 0;
}

Q_FOREACHおそらくこれは、boost foreach と競合していることを示していると思います。

しかし、私はこの問題を解決する方法がわかりませんか?

4

2 に答える 2

1

コンパイラ フラグ-DQT_NO_KEYWORDSを設定すると、boost と qt の間の衝突が無効になります。

slotsただし、コード内の qt キーワードを, signals, emit... のように置き換える必要があります。この投稿を参照してください。

(自分のプロジェクトで boost::multi_index コンテナーを導入したときに、このメッセージを受け取りました。)

  • (qmake プロジェクトの場合CONFIG += no_keywordsはこれを行います。)
  • (cmakeプロジェクトの場合add_definitions(-DQT_NO_KEYWORDS)、これを行います。)
于 2015-07-20T12:21:21.480 に答える