當我的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. 奇怪的SELECT錯誤代碼
- 6. C#奇怪的代碼
- 7. C++中的奇怪編碼錯誤
- 8. C++奇怪的錯誤strstr
- 9. C++奇怪的c0000005錯誤
- 10. 奇怪的錯誤 - C++
- 11. 很奇怪的段錯誤調用WinUsb_GetOverlappedResult
- 12. SQL MIN()奇怪的值
- 13. 奇怪的程序調用錯誤
- 14. C代碼奇怪(指針)
- 15. 奇怪的代碼
- 16. 帶PDOException錯誤的奇怪字符
- 17. 奇怪的錯誤,而調試
- 18. 奇怪anamoly(代碼不是沒有錯誤的工作...)
- 19. getFile方法調用具有奇怪錯誤代碼(1000)的錯誤回調 - 儘管文件存在
- 20. 奇怪的C#代碼行的工作
- 21. 奇怪的錯誤編譯代碼調用的表面低一級的CUDA API
- 22. Visual C 2012:我越來越奇怪的錯誤。代碼段和錯誤提供
- 23. C#奇怪的代理回調行爲
- 24. 奇怪的C代碼 - 動態數組?
- 25. 奇怪的C++代碼片段
- 26. 來自C++的奇怪代碼段
- 27. C中的奇怪sprintf錯誤
- 28. 奇怪的錯誤
- 29. 奇怪的錯誤
- 30. 奇怪的錯誤
這是關於堆棧溢出的正式問題 – eplawless 2008-08-18 04:16:58