在std :: max和min中使用静态类数据

时间:2010-07-08 09:22:58

标签: c++

我有一个声明为:

的静态类数据成员
static const float MINIMUM_ZOOM_FACTOR = 4.0;

我在类成员函数中使用此常量,如下所示:

zoomFactor_ = max(zoomFactor_, MINIMUM_ZOOM_FACTOR);

此时,编译器抱怨MINIMUM_ZOOM_FACTOR是未定义的引用。但是,如果我像这样直接使用它:

if(fabs(zoomFactor_ - MINIMUM_ZOOM_FACTOR) < EPSILON) ...

它工作正常。我做错了什么?

1 个答案:

答案 0 :(得分:4)

只能在类中定义整数常量。浮点(或类类型)常量必须在类中声明,然后在外部定义和初始化。实际上,这意味着您必须在源文件中定义它。

// header file
class thingy
{
    static const float MAXIMUM_ZOOM_FACTOR;
};

// source file
const float thingy::MAXIMUM_ZOOM_FACTOR = 4.0f;

至于为什么直接使用有效但max没有:max通过引用获取其参数,因此它可能需要常量对象的地址。如果您尚未定义对象,那么这将无效。直接使用可能会将其替换为编译时常量,而不需要地址。