簡體   English   中英

std :: numeric_limits <double> :: min()上的錯誤C2589

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM