tôi đang làm một cái gì đó giống nhưSử dụng const tĩnh + const như mảng ràng buộc
Class.hpp này:
class Class {
private:
static const unsigned int arraySize;
int ar[arraySize+2];
};
Class.cpp:
#include <Class.hpp>
const unsigned int arraySize = 384;
Trình biên dịch (q ++, một Trình biên dịch C++ cho hệ điều hành QNX dựa trên g ++) cung cấp cho tôi error: array bound is not an integer constant
trong khi biên soạn một đơn vị bao gồm Class.hpp
(không phải khi biên dịch Class.cpp).
Tại sao tính năng này không hoạt động? Tôi biết rằng một thành viên const tĩnh có thể được sử dụng như một mảng bị ràng buộc, được đảm bảo bởi tiêu chuẩn C++ (xem this anwser). Nhưng tại sao trình biên dịch không thấy kết quả của static const + const
như một hằng số?
Biên dịch tốt cho tôi (gcc 4.6.1), như thường lệ. Có lẽ là một lỗi trong trình biên dịch đó? –
Tôi đã cập nhật ví dụ của mình để phù hợp hơn với mã thực của tôi. Có thể có vấn đề với việc khai báo về mảngSizeSize? – MBober
Vui lòng xem tại đây: [DR # 721] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#721). Nó luôn luôn được dự định (và trong C++ 11 rõ ràng là trường hợp) mà initializer cho hằng số sẽ được hiển thị tại điểm mà thành viên dữ liệu tĩnh hoặc biến cố định được sử dụng để nó đủ điều kiện như là một biểu thức liên tục. –