注册 登录
编程论坛 C++教室

static在类的用法问题!

daemon1 发布于 2011-06-12 22:09, 1219 次点击
类中这样定义过不了:
(h文件中)
static const int bb=10;
 int k[bb];
(cpp文件中)
const int a::bb;
求解!
10 回复
#2
daemon12011-06-12 22:13
Compiling...
hhh.cpp
C:\Users\Administrator\Desktop\c++\hhh.cpp(21) : error C2258: illegal pure syntax, must be '= 0'
C:\Users\Administrator\Desktop\c++\hhh.cpp(21) : error C2252: 'bb' : pure specifier can only be specified for functions
C:\Users\Administrator\Desktop\c++\hhh.cpp(22) : error C2065: 'bb' : undeclared identifier
C:\Users\Administrator\Desktop\c++\hhh.cpp(22) : error C2057: expected constant expression
C:\Users\Administrator\Desktop\c++\hhh.cpp(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
C:\Users\Administrator\Desktop\c++\hhh.cpp(25) : error C2039: 'bb' : is not a member of 'a'
        C:\Users\Administrator\Desktop\c++\hhh.cpp(19) : see declaration of 'a'
C:\Users\Administrator\Desktop\c++\hhh.cpp(25) : error C2734: 'bb' : const object must be initialized if not extern
C:\Users\Administrator\Desktop\c++\hhh.cpp(25) : error C2373: 'bb' : redefinition; different type modifiers
执行 cl.exe 时出错.


这是不是编译器问题啊!我用的是vc6++!
#3
rjsp2011-06-13 08:11
1. 换编译器
2. 类中定义了,就别在外部定义,即
要么.h中
static const int bb=10;

要么.h中
static const int bb;
.cpp中
const int a::bb = 10;
#4
duliningmiss2011-06-13 14:00
我用的是VC9.0 在.h文件中定义static const int BUFFER_LENGTH = 64; 在.cpp中不用再定义或者声明,这样是可以正确使用的啊
#5
daemon12011-06-13 14:52
回复 3楼 rjsp
不行啊!还是错啊!
Compiling...
hhh.cpp
C:\Users\Administrator\Desktop\c++\hhh.cpp(22) : error C2057: expected constant expression
C:\Users\Administrator\Desktop\c++\hhh.cpp(22) : warning C4200: nonstandard extension used : zero-sized array in struct/union
再求解!谢谢了!
#6
daemon12011-06-13 14:53
回复 4楼 duliningmiss
我们要求要用vc6的!所以......
#7
yuutian2011-06-14 18:03
c++中不允许这样给数组定义
    这样将bb放到数据中是错误的。
          你为何不直接将数组写成k[10]呢?
#8
daemon12011-06-14 21:34
回复 7楼 yuutian
定义成常量,是可以作为数组大小的吧!
#9
mainchar2011-06-14 21:54
可以定义常量!

#define bb 10
int k[bb];
#10
specilize2011-06-14 22:42
关于这个问题,Effective C++中有一个条款对其进行了详细的讨论。
static const int bb=10;像这种int类型的在头文件中定义static const成员变量并对其进行初始化,然后使用这个变量类作为数组的参数int k[bb];的用法是可以的,但是即使你已经对bb进行了初始化,还是必须在cpp文件中进行这样的定义 const int a::bb;但不用对其进行初始化。Effective C++中说可能比较老的编译器不支持这种行为,所以你可以这样做,在头文件中定义一个变量,但不对其进行初始化,即static const int bb;然后在cpp文件中对其进行初始化const int a::bb=10;
#11
daemon12011-06-16 21:41
回复 10楼 specilize
不行啊!应该是编译器了啊!
不过还是要谢谢各位!
1