我有以下代码。
#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
函数中更改它。
关于c++ - 为什么 char 数组类型的类成员在成员函数中突然变成 const char 数组类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161592/