當我的C++代碼調用min()或max()時,出現奇怪的錯誤。我正在使用Visual C++編譯器。帶有min()/ max()調用的代碼的奇怪C++錯誤
回答
檢查你的代碼,包括WINDOWS.H頭文件,要麼你的代碼或其他第三方頭有自己分鐘()/MAX()定義。如果是,則與NOMINMAX的這樣一個定義,預先考慮您的WINDOWS.H包括:
#define NOMINMAX
#include <windows.h>
啊...範圍吧,夥計:std::min()
,std::max()
。
您仍然需要#define NOMINMAX或預處理器仍然會擴展min&max。 – Ferruccio 2008-09-11 01:49:36
我有多年沒有使用過它,但是從內存提升也可能指定最小和最大,可能嗎?
另一種可能性來自副作用。大多數最小/最大宏將多次包含這些參數,可能無法達到您的預期。錯誤和警告也可能產生。
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))擴展中的()將避免使用公式調用它時出現的問題。嘗試擴大最大值(A,B + C)afterwards i is either plus 1 or plus 2
老實說,當涉及到最低/最高,我覺得最好還是定義自己的:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
坦率地說,這是在尋求麻煩。在C++中,使用'使用std :: swap`並編寫自己的交換時,你可以做得比默認更好。在C語言中,寫下`#define min(a,b)((a)<(b)?(a):(b))`並確認你不會用任何副作用調用它,因爲你會有多重評價。 – 2009-11-24 22:28:35
由於Windows此定義爲函數式宏,以下解決方法可供選擇:
int i = std::min<int>(3,5);
這工作,因爲宏觀min()
時,它的後面<
只有當min
後跟(
擴大,而不是。
- 1. 奇怪的錯誤編譯C代碼
- 2. C函數調用奇怪的錯誤
- 3. 有點奇怪C++代碼
- 4. 代碼中的Xcode奇怪的錯誤?
- 5. 這個C代碼有什麼問題?奇怪的錯誤
- 6. 奇怪的SELECT錯誤代碼
- 7. 奇怪的錯誤++ MATLAB代碼
- 8. 奇怪的代碼簽名錯誤
- 9. Python奇怪的代碼錯誤
- 10. 非常奇怪的錯誤代碼
- 11. C#奇怪的代碼
- 12. C++中的奇怪編碼錯誤
- 13. 奇怪的C#Directory.GetFiles錯誤
- 14. C++奇怪的錯誤strstr
- 15. 很奇怪的C++錯誤
- 16. c#代碼以錯誤的順序執行 - 奇怪的行爲
- 17. 錯誤代碼Visual Studio錯誤:c2059奇怪的語法錯誤
- 18. C++奇怪的c0000005錯誤
- 19. 奇怪的錯誤從C#
- 20. 奇怪的錯誤 - C++
- 21. 遇到奇怪的錯誤運行目標C代碼
- 22. C代碼(奇怪的雙重轉換)運行時錯誤
- 23. 很奇怪的段錯誤調用WinUsb_GetOverlappedResult
- 24. SQL MIN()奇怪的值
- 25. C代碼奇怪(指針)
- 26. 奇怪的錯誤
- 27. 奇怪的代碼
- 28. 奇怪的錯誤調用postgis函數
- 29. 奇怪的程序調用錯誤
- 30. 奇怪的代碼
這是關於堆棧溢出的正式問題 – eplawless 2008-08-18 04:16:58