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

我在模棱两可的符号问题上遇到了同样的问题。对我来说,事实证明我使用了两个功能相同但定义明显不同的命名空间。我必须停止使用其中一个命名空间,这解决了这个问题。

举个例子:

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 回答
0

我遇到了同样的问题安装 VS2010 SP1anonymous-namespace'::<lambda0>为我解决了这个模棱两可的问题。没有 SP1 的 VS2010 存在 lambda 问题。

于 2020-09-02T12:24:30.753 回答