[英]error C2893: Failed to specialize function template 'unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const'
[英]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_t
或unsigned int
執行所有操作。 特定於您的特定應用程序。
這兩個參數之一是size_t
,另一個是unsigned int
。 在32位平台上,兩者是同一類型,因此沒有問題。
在64位平台上,它們是不同的類型,並且min()
模板要求兩個參數都具有相同的類型,這就是您的問題。
無論哪個參數是unsigned int
,都將其顯式轉換為size_t
。 這可能是第一個:
unsigned int endj = min( (size_t)(i + maxPeakWidthInPixel + 1), steps);
但是,如果不是,則將另一個size_t
為size_t
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.