C++编译错误"a storage class can only be specified for objects and functions"解决
对于这个错误,顾名思义,就是"storage class"的修饰符用在了对象或者变量(objects)和函数(functions)外的其他地方。
在C/C++规范中,定义了四种storage class的修饰符。
- auto
- register
- static
- extern
我所遇到的这个编译错误所对应的代码是下面所示。
class CDataSet{
public:
static enum ePrintRange
{
ALLDATA = 0,
......
}
......
}
(本人在学习STL,从互联网上找来一些例子学习,本人在编译某个例子的过程中遇到这个问题)
很显然,是这个"static"用的地方不对。查找了好多C++书籍和比较权威的解释,都指出这个"static"只能用于object和function。这个static用于修饰class的storage,很明显是错误的。去掉这个static,编译通过。
在Java中确实支持在某个类中定义一个内部static类,而Java的大部分语法的语义与C++比较接近,也许写这个例子的牛人想当然的认为C++中应该也有内部static类。
说句题外话,从网上看到C++的例子后,如果觉得有疑惑的话,就不妨编译一下,总有收获的:或者加深了对原来知识的理解,或者学到了新的技术。
还有在使用extern class a;的时候也会出现这样的提示。