簡體   English   中英

具有“min”成員的類的C ++初始化列表

[英]C++ initialization list for class with “min” member

我見過一個名為成員變量minmax

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)

根據您的具體情況,您有多種選擇。

  1. 使用@MSalters建議的大括號初始化

  2. 在包含Windows頭文件之前定義NOMINMAX ,以避免定義minmax宏。 這取決於您的代碼有多大以及您對代碼的控制程度。

  3. 只需#undef宏。 僅推薦在源文件中。

  4. 使用MSVC預處理器指令來保存,取消然后恢復宏。 像這樣......

     #pragma push_macro("min") #undef min /* use min here */ #pragma pop_macro("min") 

暫無
暫無

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

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