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;
这样就没有问题了
然后在类的实现cpp文件里面写const int X::size;
这样就没有问题了
#3
#include <iostream>
class X
{
static const int size = 100;
int array[size]; //提示此处有错!
};
int main()
{
return 0;
}
整型静态常量可以在类内初始化。
不过最好还是用enum,另外各编译器关于整型常量的实现也是有所不同的。
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;
}
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;
这样就没有问题了
然后在类的实现cpp文件里面写const int X::size;
这样就没有问题了
#3
#include <iostream>
class X
{
static const int size = 100;
int array[size]; //提示此处有错!
};
int main()
{
return 0;
}
整型静态常量可以在类内初始化。
不过最好还是用enum,另外各编译器关于整型常量的实现也是有所不同的。
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;
}
2.你可以写成
#include <iostream>
class X
{
enum{SIZE = 100};
int array[SIZE]; //提示此处有错!
};
int main()
{
return 0;
}
#5
static const的member类中的初始化 可能不被某些编译器所支持,如vc6