我有一个声明为:
的静态类数据成员static const float MINIMUM_ZOOM_FACTOR = 4.0;
我在类成员函数中使用此常量,如下所示:
zoomFactor_ = max(zoomFactor_, MINIMUM_ZOOM_FACTOR);
此时,编译器抱怨MINIMUM_ZOOM_FACTOR是未定义的引用。但是,如果我像这样直接使用它:
if(fabs(zoomFactor_ - MINIMUM_ZOOM_FACTOR) < EPSILON) ...
它工作正常。我做错了什么?
答案 0 :(得分:4)
只能在类中定义整数常量。浮点(或类类型)常量必须在类中声明,然后在外部定义和初始化。实际上,这意味着您必须在源文件中定义它。
// header file
class thingy
{
static const float MAXIMUM_ZOOM_FACTOR;
};
// source file
const float thingy::MAXIMUM_ZOOM_FACTOR = 4.0f;
至于为什么直接使用有效但max
没有:max
通过引用获取其参数,因此它可能需要常量对象的地址。如果您尚未定义对象,那么这将无效。直接使用可能会将其替换为编译时常量,而不需要地址。