我的 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
,正如其他一些人所建议的那样,但没有成功。
通过删除所有以下情况解决了问题:
使用命名空间cv
出现了。然而,我确实必须在使用 cv 命名空间的代码中出现的所有 opencv 相关函数前面添加“cv::”。
C1189 错误与此无关。
我刚刚将 opencv include 和 using 命名空间 cv 移到所有包含和函数之前以及 main 及其已解决的位置(在所有包含和使用之后)
我尝试了上述方法,但仍然看到此错误。对我来说解决这个问题的是在所有 opencv 标头包含之前移动
#include <Windows.h>
。
限制命名空间的上下文也有效。那就是:
namespace cv
{
....
}
此解决方案避免了添加相当乏味的“cv::”。