c++ - 我需要如何声明一个成员类?

标签 c++ header

我需要使用一个自定义异常类,该类将在顶级类的函数成员中使用。因此,将自定义类作为成员类是合理的。这是目前声明它们的文件:

conductor.h:

class conductor
{
    //some staff
private:
    class bad_index : public std::exception
    {
    public:
        bad_index(int);
        virtual const char* what() const noexcept;
    private:
        int _idx;
    };
};

我是 C++ 编程的新手,仍然没有了解 C++ 程序员是如何习惯做这些事情的?或许我们应该将 bad_index 类作为一个不完整的类型:

class conductor
{
    //some staff
private:
    class bad_index;
};

并使其完成并实现 cpp 文件中的所有成员函数。什么是正确的方法?

最佳答案

首先,由于bad_index是私有(private)的,不能在类外引用,所以不能用在catch(...)以外的异常处理程序中。如果不是真的需要(即异常仅供内部使用),也许不让它成为一个嵌套类就足够了,而是在 namespace 的实现文件中定义 bad_index { ...

如果 bad_index 实际上是公开的,从技术上讲,您可以在 .h 文件中声明它并在 .cpp 文件中定义它,但它在 catch 子句中将再次无法使用类用户,因为即使通过引用也无法捕获不完整类型的异常,所以您可以做的就是再次捕获它 catch(...)

关于c++ - 我需要如何声明一个成员类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187935/

相关文章:

c - 对函数 'check' 的 undefined reference (MinGW 中的 GCC 编译)

c++ - 用 C++ 读取方向键

c++ - 从类节点上的结构中创建二叉搜索树会很糟糕吗?

c++ - 如何在wxwidgets中拖动窗口大小?

regex - emacs org 模式,只搜索标题

javascript - 移动标题不可点击

c++ - `const auto` 有什么意义吗?

c++ - 从 C++ 中的父析构函数调用子方法

c++ - 关于C++头文件的简单问题

service - 如何在istio虚拟服务头精确匹配中使用OR逻辑?