gpt4 book ai didi

c++ - 为什么编译器要为我的异常类寻找默认构造函数?

转载 作者:行者123 更新时间:2023-11-30 01:47:57 24 4
gpt4 key购买 nike

我已经为我的库定义了一个小的异常层次结构。它继承自 std::runtime_error,如下所示:

class library_exception : public std::runtime_error {
using std::runtime_error::runtime_error;
};

class specific_exception : public library_exception {
int guilty_object_id;

specific_exception(int guilty_object_id_)
: guilty_object_id(guilty_object_id_) {}
};

编译器说:

error: call to implicitly-deleted default constructor of 'library_exception'

并指向specific_exception 构造函数。

为什么要在这里尝试调用默认构造函数?

最佳答案

library_exception 继承自 std::runtime_error。后者没有默认构造函数,这意味着前者不可默认构造。

同样,specific_exception 不是默认可构造的,因为它的基类不是。此处需要基类的默认构造函数,因为基类是隐式初始化的:

specific_exception(int guilty_object_id_)
: guilty_object_id(guilty_object_id_) {}

要解决此问题,请调用适当的基类构造函数:

specific_exception(int guilty_object_id_)
: library_exception("hello, world!"),
guilty_object_id(guilty_object_id_) {}

关于c++ - 为什么编译器要为我的异常类寻找默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com