【问题标题】:static const class member as initializer to member array静态 const 类成员作为成员数组的初始化器
【发布时间】:2015-12-24 21:27:27
【问题描述】:
class sarray
{
public:
    static const unsigned int iarr_size;

    void add(const char c ) {}

private :   
    unsigned char iarr[iarr_size];
    unsigned int off;

public 

};

为什么unsigned char iarr[iarr_size] 给我一个not constant expression iarr_size 错误??

iarr_size 被声明为 const。

对不起,我的英语不好。

【问题讨论】:

    标签: c++ static constants


    【解决方案1】:

    您应该使用无符号整数初始化 iarr_size。 例如:

    class sarray
    {
    public:
        static const unsigned int iarr_size = 5;
    
        void add(const char c ) {}
    
    private :   
        unsigned char iarr[iarr_size];
        unsigned int off;
    
    public 
    
    };
    

    更好的解决方案是成员iarr将是一个指向unsigned char的指针,并在构造函数中使用new来分配数组:

    class sarray
    {
    public:
        sarray()
        {
            int i = 5; // any int
            iarr = new unsigned char[i];
        }
        void add(const char c) {}
    
    private:
        unsigned char* iarr;
        unsigned int off;
    };
    

    【讨论】:

    • 如果我分开编译会导致多重定义错误
    • 不要分开。 const 应该在 cimple 时间确定,所以你应该用一个值来初始化它。只要给它一个值。更好的解决方案是成员 iarr 将是一个指向 unsigned char 的指针,并在构造函数中使用 new 来分配数组。
    • 好的,谢谢,我知道在这种情况下动态分配更好,只是学习 c++ 语法(我正在从 c 迁移到 c++)。
    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多