枚举初始化问题



程序示例:

class BASE
{
        public:
        enum ABC
        {
                ZERO,
                ONE,
                TWO,
                LAST
        };
        BASE(ABC exp): type(exp)
        {
                A[ZERO] = "1111";
               A[ONE] = "22222";
                A[LAST] = "LLLL";
        }
        virtual const char* what()throw()
        {
               return A[type];
        }
        private:
        const char* A[LAST];
        const ABC type;
};
int main()
{
        BASE a(BASE::ONE);
        cout<<a.what()<<"n";
        return 0;
}

上面的程序以分段错误结束,因为'type'枚举变量没有使用指定的值初始化,而是使用一些随机的默认值?

A是一个包含三个指针的数组,A[0]、A[1]和A[2]。

你有一个指向"LLLL"的指针,这是可以的。但是当你试图将指针赋值给A[3]时,没有A[3]这样的对象

将数组A声明为

const char* A[LAST];

表示索引0 .. (LAST-1)都是有效的。但是,在BASE构造函数中执行

 A[LAST] = "LLLL";

是对数组的越界访问

如果你想要一个"LAST"条目,试试这个:

 enum ABC
 {
     ZERO,
     ONE,
     TWO,
     LAST = TWO
 };

最新更新