max 宏定义取消:error C2589: error C2059: 语法错误 : “::”
原文鏈接:http://blog.csdn.net/danelumax2/article/details/9172465有修改!
一:關于Pcl和WIndef的沖突:
1. 錯誤輸出
??? ./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2589: “(”: “::”右邊的非法標記
??? ./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2059: 語法錯誤 : “::”
2. 錯誤代碼舉例
[c-sharp]?view plaincopy
3.?函數模板max ??
[c-sharp]?view plaincopy
?? 注:模板就是實現代碼重用機制的一種工具,它可以實現類型參數化,即把類型定義為參數, 從而實現了真正的代碼可重用性。模版可以分為兩類,一個是函數模版,另外一個是類模版。
4. 錯誤原因
? ? 函數模板max與Visual C++中的全局的宏max沖突。?
5. 解決辦法
??? 第一種辦法:設置項目屬性,在預定義處理器中添加定義NOMINMAX來禁止使用Vsual C++的min/max宏定義。
???????????????????????項目屬性?? ——> C/C++ ——> 預處理器 ——> 預處理器定義 (此處添加預定義編譯開關?? NOMINMAX)
? ? ? 注意!!!一定要加在第一個上面!!!坑爹的微軟!!!
??? 第二種辦法:?加上括號,與Vsual C++的min/max宏定義區分開? ??
| (可能是跟Windows中定義的宏想混淆了 可以用括號改變語句的順序,強制制定為stl中的函數名 double min=(std::numeric_limits<double>::max)();)? ? ? ? ? ? ? ? |
?修改為:
[c-sharp]?view plsize.Width?=?(std::max)(size.Width,?elementSize.Width);?
二:終極方案:對于使用了Windef文件的AtlImage.h 和GDIPlus.h
直接對里面的max() min()函數進行替換 ;
或者?在使用到 max() min()函數 的頭文件定義后面添加:
if nodef max def max(a,b) FUN.............. endDEF....總結
以上是生活随笔為你收集整理的max 宏定义取消:error C2589: error C2059: 语法错误 : “::”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lsof 详解
- 下一篇: 配置OpenCV的Qt开发环境