簡體   English   中英

錯誤C2782:'const _Ty&std :: min(const _Ty&,const _Ty&)':模板參數'_Ty'不明確

[英]error C2782: 'const _Ty &std::min(const _Ty &,const _Ty &)' : template parameter '_Ty' is ambiguous

我正在為64位構建軟件,以前是為32位構建軟件。 當我為64bit編譯時,該軟件完全可以在32bit上運行,它給出了一些錯誤,例如

error C2782: 'const _Ty &std::min(const _Ty &,const _Ty &)' : template parameter '_Ty' is ambiguous
see declaration of 'std::min'
        could be 'size_t'
        or       'unsigned int'

為線

unsigned int i = ...;
unsigned int maxPeakWidthInPixel = ...;
size_t steps = ...;
unsigned int endj = min( i + maxPeakWidthInPixel + 1, steps); // error

錯誤是關於編譯器無法推斷出參數的類型-但是如何在32位而非64位上進行編譯?

明確指定模板類型以解決歧義。

min<size_t>(...);

在平台上,您在size_t上不是unsigned int 因此類型推導機制無法知道要執行哪個模板實例化。

或者,您可以簡單地避免混合類型,並根據size_tunsigned int執行所有操作。 特定於您的特定應用程序。

這兩個參數之一是size_t ,另一個是unsigned int 在32位平台上,兩者是同一類型,因此沒有問題。

在64位平台上,它們是不同的類型,並且min()模板要求兩個參數都具有相同的類型,這就是您的問題。

無論哪個參數是unsigned int ,都將其顯式轉換為size_t 這可能是第一個:

unsigned int endj = min( (size_t)(i + maxPeakWidthInPixel + 1), steps);

但是,如果不是,則將另一個size_tsize_t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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