代码之家  ›  专栏  ›  技术社区  ›  Mihai Damian

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

c++
  •  2
  • Mihai Damian  · 技术社区  · 14 年前

    我有一个静态类数据成员声明为:

    static const float MINIMUM_ZOOM_FACTOR = 4.0;
    

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

    zoomFactor_ = max(zoomFactor_, MINIMUM_ZOOM_FACTOR);
    

    此时,编译器抱怨MINIMUM\u ZOOM\u FACTOR是未定义的引用。但是,如果我直接这样使用它:

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

    很好用。我做错什么了?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Mike Seymour    14 年前

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

    // header file
    class thingy
    {
        static const float MAXIMUM_ZOOM_FACTOR;
    };
    
    // source file
    const float thingy::MAXIMUM_ZOOM_FACTOR = 4.0f;
    

    至于为什么直接使用有效,但是 max 不: 最大值 通过引用获取其参数,因此它可能需要常量对象的地址。如果您还没有定义对象,那么这将不起作用。直接使用可以代替编译时常量,而编译时常量不需要地址。