我有一个静态类数据成员声明为:
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/