0

VS2010 Express を使用しており、Boost v1_47 をインストールしました。「追加のインクルードフォルダー」オプションに「インクルード」フォルダーを追加し、VSの「追加のライブラリ」オプションに「lib」フォルダーも追加しました。

次に、自分のファイルの 1 つに boost/regex.hpp を含めましたが、実際には、boost を使用したコードはまだ書いていません。ただし、ソリューションをビルドすると、次の 2 種類のエラー メッセージが大量に表示されます。

  • 次のような再定義エラー:

1>D:\boost\boost_1_47\boost/detail/interlocked.hpp(83): エラー C2373: '_InterlockedCompareExchangePointer': 再定義; 異なる型修飾子 1> C:\Program Files\Microsoft SDKs\Windows\v7.1\include\winnt.h(2597) : '_InterlockedCompareExchangePointer' の宣言を参照

  • 次のような無効な呼び出し規則エラー (これらの多く)。

D:\boost\boost_1_47\boost/regex/v4/regex_traits_defaults.hpp(271): エラー C3641: 'boost::re_detail::global_lower': /clr:pure または /clr でコンパイルされた関数の呼び出し規約 '__cdecl ' が無効です:安全

注: ソース/ヘッダー ファイルに winnt.h を明示的に含めておらず、プリコンパイル済みヘッダーを非アクティブ化し、stdafx.h インクルードを削除しようとしましたが、問題は解決しませんでした。

どうしたの?

前もって感謝します

4

1 に答える 1

0

Boostと同じ設定でプログラムをコンパイルすることを確認する必要があります。アプリケーションプロジェクトの作成に間違ったプロジェクトテンプレート(CLRなど)を使用したようです。

既存のプロジェクトのプロパティを変更してboostと互換性を持たせることもできますが、CLR ...プロジェクトにはデフォルトで互換性のないプロパティ値が多数設定されているため、新しいプロジェクトを最初から作成する(そしてインポートする)のが最も簡単な方法だと思います。既存のコード)。

「空のプロジェクト」テンプレートを使用して新しいプロジェクトを作成し、既存のソースファイルとヘッダーファイルを追加して、ブーストインクルードパスを再度追加し、必要なブースト.libファイルをに追加する必要がありますProject Properties > Linker > Input > Additional Dependencies(ほとんどのブーストライブラリは機能します)リンカー入力はヘッダーのみであるため、リンカー入力に何も追加せずにボックスに追加します。したがって、.libsを追加する必要がない場合があります。

Boostは必須のC++であり、C ++ /CLIコードではなくC++コードで使用されるように設計されているため、ネイティブC ++クラスでのみ使用でき、ほとんどのBoostヘッダーは、C ++/CLIコードを含むソースファイルに含まれている場合にヘッダーを生成します。 。

于 2012-05-17T11:55:36.720 に答える