Call to deleted constructor of 'Student'clang(ovl_deleted_init) Student.hpp(12, 5): 'Student' has been explicitly marked deleted here
时间: 2024-09-07 19:06:46 浏览: 83
Recovering_Deleted_Files_from_NAND_FlashData_Deleted_recover_nan
在C++中,当试图创建一个已声明为`deleted`的构造函数的对象时,会抛出编译错误,就像你提到的`call to implicitly-deleted default constructor of ...`一样。这通常发生在类定义中有`= delete`修饰符删除了默认构造函数的情况。
例如,在`Student.hpp`中,如果有一个这样的声明:
```cpp
class Student {
public:
// 显示地删除默认构造函数
Student() = delete;
};
```
这意味着`Student`类不允许通过无参构造函数实例化。如果你尝试这样做,编译器会在尝试创建`Student`对象时抛出错误,因为找不到默认构造函数。
解决这个问题的方法是明确地创建具有所需属性的对象,而不是依赖于默认构造。如果你确实需要一个默认状态的学生,可以添加一个有参数的构造函数或者提供一个工厂方法来创建它们:
```cpp
// 添加一个允许初始化的构造函数
explicit Student(int age) : age(age) {}
// 或者提供一个工厂方法
std::unique_ptr<Student> createStudent(int age) {
return std::make_unique<Student>(age);
}
```
阅读全文