c++ - 为什么 char 数组类型的类成员在成员函数中突然变成 const char 数组类型?

标签 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,使用strcpy时,this->composedMessage突然变成const。我见过几个类似的解决方案来初始化 char 类型数组的成员。为什么这对我不起作用?我没看到什么?

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

最佳答案

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

mutable char composedMessage[MyException::MAX_MESSAGE_LENGTH];

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

Live Example

关于c++ - 为什么 char 数组类型的类成员在成员函数中突然变成 const char 数组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161592/

相关文章:

c++ - 我怎样才能使 DirectWrite PadWrite 示例工作?

c++ - 对动态数组使用重载的 << 运算符

c - 给char指针赋值,但是说Access violation writing location

c++ - 复制到另一个数组时数组的值发生变化

c - C中遍历字符串中的字符进行分析

java - 如何求一个数的各个数字之和?

c++ - 头文件没有看到其他头标识符

c++ - 在 setiosflags 函数中使用十六进制标志

javascript - 使用 AJAX/Javascript/jQuery 构建和重新排序多维数组

javascript - 判断数组是否包含重复值