具有“min”成员的类的C ++初始化列表

时间:2014-10-01 13:24:15

标签: c++ windows winapi initialization

我见过一个名为成员变量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

在没有重命名成员变量的情况下,是否可以在这种情况下使用初始化列表?

2 个答案:

答案 0 :(得分:5)

如果你有VS2013或其他现代编译器:

A():min {false}, max {true} { }

避免了这个问题,因为min(a,b)是一个函数式宏,而{无法启动它的参数列表。

这是初学者列表特有的,所以我重新打开了这个问题。 “重复”建议在表达式上下文中使用宏,这在根本上是不同的 - 您可以在那里使用(min)

答案 1 :(得分:1)

根据您的具体情况,您有多种选择。

  1. 按照@MSalters

  2. 的建议使用大括号初始化
  3. 在包含Windows头文件之前定义NOMINMAX,以避免定义minmax宏。这取决于您的代码有多大以及您对代码的控制程度。

  4. 只需#undef个宏。仅推荐在源文件中。

  5. 使用MSVC预处理器指令保存,取消然后恢复宏。像这样......

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