首页 > 解决方案 > 从 std::exception 覆盖 what() 的正确方法

问题描述

我有以下自定义异常:

#ifndef BLATT4_OUTSIDESEABOUNDS_H
#define BLATT4_OUTSIDESEABOUNDS_H

#include <exception>

namespace GameObjects {
    class OutsideSeaBounds : public std::exception {
    public:
        [[nodiscard]] const char * what() const noexcept override;
    };
}

#endif
#include "OutsideSeaBounds.h"

namespace GameObjects {
    const char *OutsideSeaBounds::what() const noexcept
    {
        return "Das Schiff muss im Wasser liegen";
    }
}

但是,我的 IDE CLion 给了我一个警告Function 'what' hides a non-virtual function from class 'exception'。为什么会这样以及如何覆盖,而不是正确隐藏该功能?

标签: c++exceptionc++17overriding

解决方案


代码很好,你的IDE很傻。

风格说明:[[nodiscard]]这里似乎很不合适,即使在技术上没有错误,它也不会帮助任何人。


推荐阅读