静态常量的比较问题
我在C++类中声明了一个静态常量并赋值。声明代码如下:
class Line
{
......
protected:
static const int MAX_PTOL_DISTANCE_COEFFICIENT=500;
};
然后在Line成员函数IsIntersect(const CPoint & point) const
中使用该静态常量与一个计算出来的变量比较:
01 bool Line::IsIntersect(
02 const CPoint & point) const
03 {
04 int nDistCoef=0; //点到直线距离系数
05 ...... //计算这个系数
06 if(nDistCoef<MAX_PTOL_DISTANCE_COEFFICIENT)
07 {
08 //距离系数小于规定值,表示直线被选中!
09 return true;
10 }
11 else
12 {
13 return false;
14 }
15 }
我在09行设置了一个断点,运行程序后进行鼠标点击测试,却出现了莫名奇妙的问题:断点被击中时我在watch中检查nDistCoef值有时会大于500。我不明白的是,如果nDistCoef<MAX_PTOL_DISTANCE_COEFFICIENT条件不成立的话,怎么会运行到09行断点的呢?
虽然没什么根据,不过我只能怀疑静态常量不能正常和变量进行比较(现在仍然觉得不可能=_=),于是将06行的判断条件更改了一下,将常量的值先一步赋值给一个变量,再让nDistCoef和这个变量比较。代码如下:
06 int nConstCoef=MAX_PTOL_DISTANCE_COEFFICIENT;
07 if(nDistCoef<nConstCoef)
08 .....
改成这样以后,判断再未出现过错误。
哪位高手来指教一下,这是什么原因?我用的是vs.net2003。静态mfc库,MDI应用程序。
[解决办法]
那你跟踪出问题时,这个静态的常量是500码,你再仔细跟踪一下试试?
按道理不该这样“静态常量不能正常和变量进行比较”。
[解决办法]
1楼,类的成员是应该在类的内部声明,是的,一般的staic变量必须在类的内部声明,然后在类的外部定义,但是static const变量好像可以除外,可以在类的内部赋初值。
[解决办法]
这个问题没有遇到过,并且,我用的编译器没有出现这个问题,我的调试代码如下:
- C/C++ code
class Line{protected: static const int SSS=500;public: bool comp(int a) { int x=a*10; if(x<SSS) return true; else return false; }};int main(){ Line a; a.comp(5); a.comp(10); a.comp(100); a.comp(50);}