![](/img/trans.png)
[英]warning C4003 and errors C2589 and C2059 on: x = std::numeric_limits<int>::max();
[英]Error C2589 on std::numeric_limits<double>::min()
當我嘗試編譯一些代碼(而不是我自己的代碼)時,我得到一個C2589'(':'::'右側的非法令牌
在這條線上:
maxPosition[0]=std::numeric_limits<double>::min();
我想這是因為已經定義了一個min()宏,但是為什么編譯器沒有從指定的命名空間而不是宏中獲取min()?
但是為什么編譯器沒有從指定的命名空間而不是宏中獲取min()?
因為宏不關心您的命名空間,語言語義或編譯器。 預處理首先發生。
換句話說,編譯器只能看到預處理階段之后剩下的內容。 並且min
被替換為一些替換字符串,結果就是編譯器看到的結果。
在違反std :: numeric_limits :: min()函數時遇到F12
導致某些地方像 :
c:\\ Program Files(x86)\\ Windows Kits \\ 8.1 \\ Include \\ shared \\ minwindef.h
你會在哪里找到:
#ifndef NOMINMAX
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
所以加入
#define NOMINMAX
在任何#include標頭應該糾正問題之前,在.cpp文件的頂部(如WINAPI所做的那樣:以Windows.h為例)。
將其添加到文件的頂部。 我很確定它只是鏈接器在Visual Studio中工作方式的一個錯誤。 每當有操作員過載時,有時會得到這個。
using namespace std;
在我的情況下這是有效的
for (int i = min(size_used_, other.size_used_) - 1; i >= 0; --i) {
result += data_[i] * other.data_[i];
}
當這不
for (int i = std::min(size_used_, other.size_used_) - 1; i >= 0; --i) {
result += data_[i] * other.data_[i];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.