关于类中的静态常量(static const)的问题.

时间:2022-10-29 12:29:19
关于类中的静态常量(static const)的问题.
C++编程思想中的一个例子,我不知道为什么编译不过去。
书上说:如果我们在类中的一个常量表达式用到静态常量,那么这个静态常量的

定义应该出现在这个类的任何实例或类的成员函数定义之前(也许在头文件中)

。和一个内部数据类型的全局常量一样,它并不会为常量分配存储空间,又由于它

是内部连接的,所以也不会产生冲突.这种方法的另一好处是任何预定类型都可以

作为一个静态常量成员,而用enum时只能使用整型值.
程序:
#include <iostream>

class X
{
static const int size;
int array[size]; //提示此处有错!
};

const int X::size = 100;

int main()
{
return 0;
}

我在Dev-C++,VC6上都试了,均报错.不清楚怎么回事.

5 个解决方案

#1


size的初始化应放在class内,否则编译器执行到int array[size];时还不知道size的大小,就会报错了。

#2


同一楼上,声明的时候写成static const int size=10;
然后在类的实现cpp文件里面写const int X::size;
这样就没有问题了

#3


#include <iostream>

class X
{
static const int size = 100;
int array[size]; //提示此处有错!
};

int main()
{
return 0;
}

整型静态常量可以在类内初始化。

不过最好还是用enum,另外各编译器关于整型常量的实现也是有所不同的。

#4


1.静态整型常量可以在类内初始化。
2.你可以写成
#include <iostream>

class X
{
enum{SIZE = 100};
int array[SIZE]; //提示此处有错!
};

int main()
{
return 0;
}

#5


static const的member类中的初始化 可能不被某些编译器所支持,如vc6

#1


size的初始化应放在class内,否则编译器执行到int array[size];时还不知道size的大小,就会报错了。

#2


同一楼上,声明的时候写成static const int size=10;
然后在类的实现cpp文件里面写const int X::size;
这样就没有问题了

#3


#include <iostream>

class X
{
static const int size = 100;
int array[size]; //提示此处有错!
};

int main()
{
return 0;
}

整型静态常量可以在类内初始化。

不过最好还是用enum,另外各编译器关于整型常量的实现也是有所不同的。

#4


1.静态整型常量可以在类内初始化。
2.你可以写成
#include <iostream>

class X
{
enum{SIZE = 100};
int array[SIZE]; //提示此处有错!
};

int main()
{
return 0;
}

#5


static const的member类中的初始化 可能不被某些编译器所支持,如vc6