VSエンジニアリングにおける[error C 2872:「ACCESS_MASK」:不明確な記号]の解決方法

1014 ワード

VSコンパイルエンジニアリング、opencv 2.4 opencv 3にアップグレードする.1時、error C 2872:「ACCESS_MASK」:不明確な記号に遭遇し、実験によって衝突するwindowsを発見した.h単独でcppファイルに置くと、この問題を解決できます.詳細は次のとおりです.
1>C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(8534): error C2872: “ACCESS_MASK”:       
1>             “C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(8533) : DWORD ACCESS_MASK”
1>                  “D:\SDK_compile_lib\OpenCV310\include\opencv2/core/mat.hpp(63) : ACCESS_MASK”

インターネットでこの問題の解決方法を検索すると、2つの答えがあります(URL:http://blog.csdn.net/sdlkjtz/article/details/69260382):
USing namespace cvとwindowsの名前が衝突しているという説がありますが、using namespace cvを使用しないでcv::Mat;
二つ目は#includeヘッダファイルの重複です
上記の方法を試してみるつもりでしたが、工事があまりにも大きく、この問題を引き起こすA.cppファイルのセグメントコメントの過程で、#include文を追加した後にエラーが発生したことがわかりました.A.cppには、B.h,C.h,D.hなどのカスタムヘッダファイルが多く含まれており、あるファイルにはusing namespace cvが含まれているはずです.しかし、コラボレーション作業では、他人のコードを変更するのは面倒です.
解決策は、#includeが必要な関数と#includeを単独でE.cppに、関数インタフェースをE.hに、A.cppはE.hのみを含むようにすれば、両者の衝突問題は発生しない.