C 編譯錯誤 「max」巨集的實參不足

2021-07-04 09:21:29 字數 1105 閱讀 3370

報錯:1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(154): warning

c4003: 「max」巨集的實參不足

...

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error c2589: 「(」:「::」右邊的非法標記

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error c2059: 語法錯誤:「::」

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error c2143: 語法錯誤 : 缺少「(」(在「::」的前面)

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error c2059: 語法錯誤:「)」

源**:safe_conversions_impl.h

template

struct dstrangerelationtosrcrangeimpl };

原因:

因為windef.h中定義了

#ifndef max

#define max(a,b)            (((a) > (b)) ? (a) : (b))

#endif

vc的max巨集和std::numeric_limits<>max()函式衝突

解決:1.把std::numeric_limits<>max()用括號括起來避免和windows定義的巨集混淆,例如(std::numeric_limits::max)()

2.為了解決這個問題,visual c++ 定義了另外兩個功能相同的模板:_cpp_min() 和 _cpp_max()。我們可以用它們來代替std::min() 和 std::max()(未驗證)

參考:

c 編譯錯誤

一.變數未定義的引用 1.如果變數是類中的靜態成員,需要先在類外部初始化。否則會出現此種錯誤 二。標頭檔案包含了,卻報 zsp ipc proxy client.hh 8 1 錯誤 expected class name before endif 注意不能包含這些函式所在庫的標頭檔案。比如info ...

C2338編譯錯誤

今天將乙個工程公升級為 vs2019 64 位編譯時出現如下錯誤 error c2338 windows headers require the default packing option.changing this can lead to memory corruption.this diagn...

C語言編譯錯誤(2020 04 03)

當出現這種問題,其實一般都感覺自己沒錯,最差的方法就是重新打一遍。下面說下原因 代表編譯器在編譯原始檔時遇到了不可識別的非法字元。其值為ascii碼值243。這乙個值並不在合法的英文本元範圍 0 127 範圍內,所以一般都是由於誤輸入造成的。出現這類問題時,需要根據提示錯誤的行數,找到對應行,然後重...