我正在做这样的事情
Class.hpp:
class Class {
private:
static const unsigned int arraySize;
int ar[arraySize+2];
};
Run Code Online (Sandbox Code Playgroud)
Class.cpp:
#include <Class.hpp>
const unsigned int arraySize = 384;
Run Code Online (Sandbox Code Playgroud)
编译器(q ++,基于g ++的QNX OS的c ++编译器)error: array bound is not an integer constant在编译单元时给了我Class.hpp(包括编译Class.cpp时).
为什么不工作?我知道静态const成员可以用作数组绑定,由C++标准保证(请参阅此anwser).但是为什么编译器看不到static const + const作为常量的结果呢?
bro*_*ekk 13
这是编译器应该接受的好代码:
class Class {
const static int arraySize = 384;
int ar[arraySize+2];
};
Run Code Online (Sandbox Code Playgroud)
如果不是,你的编译器就坏了.
但是,如果将实际常量从头文件移动到选定的转换单元,则会使代码无效.
// Class.h
class Class {
const static int arraySize;
int ar[arraySize+2]; // ERROR
};
// Class.cpp
const int Class::arraySize = 384;
Run Code Online (Sandbox Code Playgroud)
这是因为Class无法在编译时根据标题中可用的数据确定对象的大小.这不是完全正确的理由,但沿着这些线的推理有助于理解这样的编译错误.
为了避免犯这样的错误,你可以static const int用enum,例如
class Class {
enum { arraySize = 384 };
int ar[arraySize+2];
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8300 次 |
| 最近记录: |