枚举初始化问题

时间:2011-09-20 07:54:45

标签: c++

以下是一个示例程序:

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'枚举变量没有用指定的值初始化,但有一些随机的默认值?

3 个答案:

答案 0 :(得分:2)

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

你有一个指向“LLLL”的指针就可以了。但是当你尝试将指针分配给A [3]时,就没有A [3]这样的对象。

答案 1 :(得分:1)

您将数组A声明为

const char* A[LAST];

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

 A[LAST] = "LLLL";

这是对数组的越界访问。

答案 2 :(得分:0)

如果您想要“最后”条目,请尝试以下操作:

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