为什么类型为char数组的类成员在成员函数中突然出现类型为const char数组?

时间:2015-12-08 16:54:58

标签: c++ arrays char initialization member

我有以下代码。

#include <exception>

public MyException : public std::exception {
private:
    const char* MESSAGE = "ExceptionReport";

protected:
    static const int MAX_MESSAGE_LENGTH = 200;
    char composedMessage[MyException::MAX_MESSAGE_LENGTH];

public:
    virtual const char* what() const throw() {
        strcpy(this->composedMessage, this->MESSAGE);
        return this->composedMessage,
    }
};

我想知道为什么这不起作用。根据tu VS 2013 this->composedMessage在使用const时突然strcpy。我已经看到几个类似的解决方案来初始化char数组的成员。为什么这不适合我?我什么看不到?

我需要composedMessagestrcat的子类中通过MyException添加更多信息。但如果它甚至不能以当前的形式工作,那就没有用了。

1 个答案:

答案 0 :(得分:4)

what()标记为const。由于它是const,因此您无法修改函数中的类状态(composedMessage)。您可以将composedMessage mutable设为:

mutable char composedMessage[MyException::MAX_MESSAGE_LENGTH];

这将允许您在const函数中更改它。

Live Example