2010-07-08 192 views
2

使用静态类数据我有一个静态类数据成员声明:中的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) ... 

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

+0

发布一些可编译的代码,说明你正在做什么。 – 2010-07-08 09:24:51

+0

我的猜测是,你的第二个例子与'MAXIMUM_ZOOM_FACTOR'的声明在同一个文件中,而你的第一个例子不是。 'static'防止在源文件之外使用它。 – Job 2010-07-08 09:27:14

+0

@ Job没有,因为它是一个静态的_class_成员,因此静态的含义是不一样的... – 2010-07-08 09:41:20

回答

4

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

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

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

至于为什么直接使用的作品,但max不会:max参照接受它的参数,所以它可能需要不断的对象的地址。如果你还没有定义该对象,那么这将不起作用。直接使用可能会将其替换为编译时常量,而不需要地址。