中的std ::最大值和最小值
问题描述:
使用静态类数据我有一个静态类数据成员声明:中的std ::最大值和最小值
static const float MINIMUM_ZOOM_FACTOR = 4.0;
我使用这个常量在类的成员函数是这样的:
zoomFactor_ = max(zoomFactor_, MINIMUM_ZOOM_FACTOR);
此时,编译器会抱怨MINIMUM_ZOOM_FACTOR是未定义的引用。但是,如果我直接使用它:
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
参照接受它的参数,所以它可能需要不断的对象的地址。如果你还没有定义该对象,那么这将不起作用。直接使用可能会将其替换为编译时常量,而不需要地址。
发布一些可编译的代码,说明你正在做什么。 – 2010-07-08 09:24:51
我的猜测是,你的第二个例子与'MAXIMUM_ZOOM_FACTOR'的声明在同一个文件中,而你的第一个例子不是。 'static'防止在源文件之外使用它。 – Job 2010-07-08 09:27:14
@ Job没有,因为它是一个静态的_class_成员,因此静态的含义是不一样的... – 2010-07-08 09:41:20