我见过一个名为成员变量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
宏
在没有重命名成员变量的情况下,是否可以在这种情况下使用初始化列表?
答案 0 :(得分:5)
如果你有VS2013或其他现代编译器:
A():min {false}, max {true} { }
避免了这个问题,因为min(a,b)
是一个函数式宏,而{
无法启动它的参数列表。
这是初学者列表特有的,所以我重新打开了这个问题。 “重复”建议在表达式上下文中使用宏,这在根本上是不同的 - 您可以在那里使用(min)
。
答案 1 :(得分:1)
根据您的具体情况,您有多种选择。
按照@MSalters
在包含Windows头文件之前定义NOMINMAX
,以避免定义min
和max
宏。这取决于您的代码有多大以及您对代码的控制程度。
只需#undef
个宏。仅推荐在源文件中。
使用MSVC预处理器指令保存,取消然后恢复宏。像这样......
#pragma push_macro("min")
#undef min
/* use min here */
#pragma pop_macro("min")