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

标签 c++

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

static const float MINIMUM_ZOOM_FACTOR = 4.0;

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

zoomFactor_ = max(zoomFactor_, MINIMUM_ZOOM_FACTOR);

此时,编译器提示 MINIMUM_ZOOM_FACTOR 是 undefined reference 。但是,如果我像这样直接使用它:

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

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

最佳答案

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

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

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

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

关于c++ - 在 std::max 和 min 中使用静态类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202168/

相关文章:

c++ - 在 Windows 7 上编译和运行 GTK+ 应用程序

c++ - 为 C++ 中的每个方法调用执行特定代码

C++ 在所需大小未知时使用内存中的空间

c++ - Boost.Log 和创建守护进程; `fork` 不允许?

c++ - 如何在 cpp 和 cuda 模块中使用 cuda 类头文件

c++ - C++中字符串文字的数据类型是什么?

c++ - 在模板参数中使用静态 constexpr 成员数组作为指针

c++ - 根据实例化点期望不同的类型

c++ - 使用 CMake 和 AUTORCC 的 Qt 资源文件

c++ - 如何去掉下面程序中的goto和flip