什么原因导致“C2872 'ACCESS_MASK':不明确的符号”?

问题描述 投票:0回答:4

我的 Visual Studio 2015 C++ 项目出现错误,该错误发生了 39 次,其中指出:

C2872 'ACCESS_MASK':不明确的符号

我的问题是,发生这些情况的“文件”都是 Windows 文件,例如:

winnt.h

winuser.h

winreg.h

其中一个项目

.h
文件的包含部分如下:

#pragma once;
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <opencv/cvaux.h>//Background modeling header files

#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/video.hpp>
#include <windef.h>
using namespace cv; 

另一个

.h
文件包含以下内容:

#include <opencv2/opencv.hpp>
#include <XnCppWrapper.h>//OpenNI
using namespace cv;  

#include <iostream>  
#include <stdlib.h>
using namespace std ; 

是否可能因多次“使用命名空间...”而出现错误?

我遇到的唯一其他错误也来自 winnt.h 文件,我不确定它是否相关,但为了以防万一而将其包含在内,如下所示:

C1189 #error:“无目标架构”

我已经尝试更改包含的 Windows 文件以及

using namespace cv
,正如其他一些人所建议的那样,但没有成功。

c++ windows visual-studio include ambiguous
4个回答
4
投票

通过删除所有以下情况解决了问题:

使用命名空间cv

出现了。然而,我确实必须在使用 cv 命名空间的代码中出现的所有 opencv 相关函数前面添加“cv::”。

C1189 错误与此无关。


1
投票

我刚刚将 opencv include 和 using 命名空间 cv 移到所有包含和函数之前以及 main 及其已解决的位置(在所有包含和使用之后)


0
投票

我尝试了上述方法,但仍然看到此错误。对我来说解决这个问题的是在所有 opencv 标头包含之前移动

#include <Windows.h>


0
投票

限制命名空间的上下文也有效。那就是:

namespace cv
{
....
}

此解决方案避免了添加相当乏味的“cv::”。

© www.soinside.com 2019 - 2024. All rights reserved.