Call to deleted constructor of 'Student'clang(ovl_deleted_init) Student.hpp(12, 5): 'Student' has been explicitly marked deleted here
时间: 2024-09-07 11:06:46 浏览: 51
在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);
}
```
相关问题
In template: call to implicitly-deleted default constructor of ps_push::TalMsgPushConfigConcrete
对于这个问题,是因为你在使用 `ps_push::TalMsgPushConfigConcrete` 类时,调用了它的默认构造函数,但该默认构造函数被删除了(implicitly-deleted)。这可能是因为该类中有一个成员变量或父类的构造函数被删除,或者该类被声明为只能进行移动构造函数或复制构造函数的类。你需要检查该类的定义或者使用其他可用的构造函数。
Call to implicitly-deleted default constructor of 'unordered_map<Point3D, MapPoint>'
这个错误信息意味着你正在尝试使用一个没有定义的默认构造函数创建一个 `unordered_map` 对象。可能的原因是你的 `Point3D` 或 `MapPoint` 类没有默认构造函数,而 `unordered_map` 需要一个默认构造函数来创建它的桶。
你可以通过以下几种方式来解决这个问题:
1. 为 `Point3D` 和 `MapPoint` 类添加默认构造函数。
2. 使用带有比较函数的自定义哈希函数,以便在 `unordered_map` 中使用自定义类型的键。
3. 使用 `emplace` 或 `insert` 函数来插入具有已定义构造函数的键值对。