C++ 不明确的符号错误?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9475999/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 12:52:57  来源:igfitidea点击:

Ambiguous symbol error?

c++compiler-errors

提问by Haxify

int ii, maxnum;  
for(ii=1; ii<=num-1; ii++) {  
    if(count[ii]>max) {  // the part where I get C2872 Ambiguous Symbol error  
        max = count[ii]; // the part where I get C2872 Ambiguous Symbol error  
        maxnum = ii;  
    }  
}  

I've never gotten this error and this is frustrating.

我从来没有遇到过这个错误,这令人沮丧。

回答by FatalError

Your variable maxconflicts with std::max(). Try using a different name and it ought to fix that error.

您的变量maxstd::max(). 尝试使用不同的名称,它应该可以修复该错误。

回答by Mona Jalal

I had the same problem when using Intel RealSense 3D SDKin C++. I had a hand.cppand hand.hin my own code and when I had using namespace Intel::RealSense;it happen to be a conflict. In order to fix it, I removed using namespace Intel::RealSense;and added PXC to each class name related to the RealSense SDK. Here are some example of new changes: #

我使用的时候有同样的问题Intel RealSense 3D SDKC++。我有一个hand.cppandhand.h在我自己的代码中,当我遇到using namespace Intel::RealSense;它时发生了冲突。为了修复它,我删除using namespace Intel::RealSense;并添加了 PXC 到与实感 SDK 相关的每个类名。下面是一些新变化的例子:#

include "RealSense/SenseManager.h"
#include "RealSense/SampleReader.h"
#include "util_render.h"
#include "Visualizer.h"
#include <iostream>
using namespace std;
//using namespace Intel::RealSense;
PXCSenseManager *pp = PXCSenseManager::CreateInstance();
PXCCapture::Device *device;
PXCCaptureManager *cm;

and here's what the old code looked like:

这是旧代码的样子:

#include "RealSense/SenseManager.h"
#include "RealSense/SampleReader.h"
#include "util_render.h"
#include "Visualizer.h"
#include <iostream>
using namespace std;
using namespace Intel::RealSense;
SenseManager *pp = SenseManager::CreateInstance();
Capture::Device *device;
CaptureManager *cm;

After the changes, I didn't receive the following error anymore.

更改后,我不再收到以下错误。

Severity? ? Code? ? Description Project File? ? Line? ? Suppression State
Error ? C2872 ? 'Hand': ambiguous symbol? ? OpenARK-SDK c:\openark\Object3D.h 

回答by Thomas

I think the problem is not std::max()but these horrible #define'sin minwindef.h:

我认为问题不在于std::max()这些可怕#define's的地方minwindef.h

#ifndef NOMINMAX

  #ifndef max
  #define max(a,b)            (((a) > (b)) ? (a) : (b))
  #endif

  #ifndef min
  #define min(a,b)            (((a) < (b)) ? (a) : (b))
  #endif

  #endif  /* NOMINMAX */

Use #define NOMINMAXin your project settings or stdafx.h.

使用#define NOMINMAX在您的项目设置或stdafx.h