函数“ what()”的“(抽象)异常类”的定义错误

时间:2018-07-15 10:38:07

标签: c++ c++11

给出以下类别:

#include <iostream>

using std::ostream;

class MatrixException: public std::exception {
public:
    virtual ~MatrixException() {
    }

    virtual const char* what() throw ()const = 0; // error1 , error2
};

class BadDims: public MatrixException {
public:
    const char* what() throw ()const override {
        return "Bad dimensions";
    }
};

有人可以解释我为什么会出现以下错误吗?

  

预期为';'在成员声明结尾

     

期望的'unqualified-id'在'='tokenov之前

1 个答案:

答案 0 :(得分:0)

@VTT和其他人说的话,但是std::exception::what被声明为noexcept,所以您不应该承诺/威胁要首先扔东西。

因此,代码应如下所示(经过一些整理)

#include <exception>

class MatrixException : public std::exception {
public:
    virtual ~MatrixException() { }

    virtual const char* what() const noexcept = 0;
};

class BadDims : public MatrixException {
public:
    const char* what() const noexcept override { return "Bad dimensions"; }
};

让我感到困惑的是,为什么OP的代码完全可以编译。也许年龄更大(如果可能的话)和睿智(错误,同上)的人可以向我解释。

Live demo