[英]C++ initialization list for class with “min” member
我見過一個名為成員變量min
和max
class A
{
public:
A();
~A();
bool min;
bool max;
...
};
用構造函數
A::A()
{
min=false;
max=true;
...
}
我試圖用初始化列表重寫它:
A::A():min(false), max(true){}
但是我收到了警告+錯誤
warning C4003: not enough actual parameters for macro 'min'
error C2059: syntax error : ')'
因為min
宏是在WinDef.h
定義的
在沒有重命名成員變量的情況下,是否可以在這種情況下使用初始化列表?
如果您有VS2013或其他現代編譯器:
A():min {false}, max {true} { }
避免這個問題因為min(a,b)
是一個函數式宏而且{
無法啟動它的參數列表。
這是初始化列表特有的,所以我重新打開了這個問題。 “重復”建議在表達式上下文中使用宏,這在根本上是不同的 - 你可以在那里使用(min)
。
根據您的具體情況,您有多種選擇。
使用@MSalters建議的大括號初始化
在包含Windows頭文件之前定義NOMINMAX
,以避免定義min
和max
宏。 這取決於您的代碼有多大以及您對代碼的控制程度。
只需#undef
宏。 僅推薦在源文件中。
使用MSVC預處理器指令來保存,取消然后恢復宏。 像這樣......
#pragma push_macro("min") #undef min /* use min here */ #pragma pop_macro("min")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.