conversiion from 'std::_shared_ptr<int,(__gnu_cxx::_Lock_policy)2>::element_type*‘ {aka 'int*'} to non-scalar type 'std::shared_ptr<int>'requested
时间: 2024-03-04 13:49:14 浏览: 107
C++11 std::shared_ptr总结与使用示例代码详解
这个错误通常是因为您将一个指针类型的变量或参数,直接赋值给了 `std::shared_ptr` 类型的智能指针,而这是不允许的。
例如,下面的代码会导致这个错误:
```
int* p = new int(10);
std::shared_ptr<int> ptr = p; // 错误:不能将 int* 类型的指针直接赋值给 std::shared_ptr<int> 类型的智能指针
```
正确的做法是要使用智能指针的构造函数,将指针类型的变量或参数转换为智能指针类型:
```
int* p = new int(10);
std::shared_ptr<int> ptr(p); // 正确:使用 std::shared_ptr<int> 的构造函数将 int* 类型的指针转换为智能指针类型
```
或者,您也可以使用 `std::make_shared` 函数来创建智能指针:
```
int* p = new int(10);
std::shared_ptr<int> ptr = std::make_shared<int>(*p); // 正确:使用 std::make_shared 函数创建智能指针并初始化
```
这样就能够避免这个错误了。
阅读全文