2

Visual Studio 2010 を使用して C++ コードを作成しています。プロジェクトとそのすべてのコンテンツは他の誰かによって書かれ、共有ドライブにコピーされました。作成者が自分のコンピューターでビルドすると、正常に動作します。ソリューションを構築しようとすると、これらのエラーが大量に発生します

error C2872: '<lambda0>' : ambiguous symbol could be 
 '[File].cpp(66) : anonymous-namespace'::<lambda0>' or 
 '[Different file].h(549) : `anonymous-namespace'::<lambda0>'. 

エラーがあるとされる行の例を次に示します。

std::pair<int, std::pair<int, Point>> b) -> bool { return (a.second.second < b.second.second ); });

エラーは常に「});」で終わる行で発生するようです。ここに示す完全なコードはかなり膨大であり、他のコンピューターでも動作するため、おそらく私の設定か何かに問題があると思われます。彼らが何であるかについて推測できる人はいますか?

4

3 に答える 3

2

これを見たかどうかはわかりませんが、そのコンパイラ エラーの MSDN ページによると:

C2872 can occur if a header file includes a using Directive (C++), and a subsequent header file is #include'd and contains a type that is also in the namespace specified in the using directive. Specify a using directive only after all your header files are specified with #include.

MSDN ページ

于 2012-04-10T00:17:25.037 に答える
0

あいまいなシンボルの問題で同じ問題が発生しました。私にとっては、同じ機能を持つが明らかに異なる定義を持つ 2 つの名前空間を使用していたことがわかりました。名前空間の 1 つの使用を停止する必要があり、これで問題は解決します。

例として:

using namespace cv;
using namespace boost::accumulator;
accumulator_set<double, stats<tag::mean, tag::variance> > acc;
double meanval = mean (acc);

これは、コンパイル エラーによって発生します。error C2872: 'mean' : ambiguous symbolこれは、cv と boost::accumulator の両方の名前空間が同じ関数 "mean" を持っているためです。

これが役立つことを願っています

于 2013-03-06T21:55:55.013 に答える