Странная ошибка

Доброго времени суток.
Пишу класс, который наследуется от std::exception:

namespace sfar
{
    //Класс исключения
    class fsys_except: public std::exception
    {
    public:
        //Дополнительно сообщение
        std::string msg;
        //Номер ошибки
        error_t err;

        fsys_except( const std::string &m, error_t t ):
            msg( m ),
            err( t )
        {}

        //what() возвращает "<сообщение> + <информация об ошибке>"
        const char *what() const throw()
        {
            return (msg + std::strerror( err )).c_str();
        }
    };
}

Компилятор (gcc 4.8.2) ругается на строчку «class fsys_except: public std::exception»:

looser throw specifier for virtual sfar::fsys_except::~fsys_except

Единственное, что нашёл в интернете, это добавить строчку «virtual ~fsys_except() throw()». Но во-первых я так и не понял в чём ошибка. Во-вторых это не помогло.
В чём тут загвоздка и как её исправить?

Скинь весь код на misterfake(ПСИНА)live.ru посмотрю

и момент на скрине:

return (msg + std::strerror(err)).c_str() ;

operator+ в данном случае дает временный объект и Вы возвращаете указатель на данные, которые будут вскоре уничтожены?

Отправил.

Вы возвращаете указатель на данные, которые будут вскоре уничтожены?

Судя по всему, да :/

porshe, у меня всё компилируется без проблем.

По поводу кода еще:

virtual void open( int openmode = 0 ) = 0;

Параметры по-умолчанию имеют статическое связывание, может не стоит их использовать в виртуальных функциях?

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.