2015-12-08 29 views
2

我有以下代碼。爲什麼類型爲char數組的類成員在成員函數中突然變爲const char數組類型?

#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, 
    } 
}; 

我想知道爲什麼這不起作用。按照2013年this->composedMessage,使用strcpy時突然爲const。我見過幾個類似的解決方案來初始化類型char數組的成員。爲什麼這不適合我?我沒有看到什麼?

我需要composedMessage通過strcatMyException的子類中添加更多信息。但是,如果它現在還沒有工作,那是沒有用的。

+0

一般來說,這個想法是不是從設計的角度來看不錯。 what()不應該修改消息的內部狀態。如果有人在評估'what()'後重新拋出異常,你會怎麼做? – SergeyA

回答

4

what()標記爲const。由於它是const,所以不能修改函數中的類別狀態(composedMessage)。您可以composedMessagemutable喜歡:

mutable char composedMessage[MyException::MAX_MESSAGE_LENGTH]; 

這將允許你去改變它在const功能。

Live Example

+0

@Lilo我不確定你在問什麼。如果你使'composedMessage'變爲'mutable',那麼你可以用''what''來修改它。 – NathanOliver

+0

非常感謝! :)應該認識到該函數的'const'問題。但我還沒有遇到'可變',所以非常感謝! :) – Lilo

+0

@Lilo沒問題。 – NathanOliver