我的shared_ptr初始化列表代码有什么问题?

What is wrong with my shared_ptr initialization list code?

本文关键字:什么 问题 代码 列表 shared ptr 初始化 我的      更新时间:2023-10-16

我有一个类,其中包含另一个类的shared_ptr。我正在类的构造函数中设置shared_ptr。当我编译这个代码时,我得到了一个看起来很奇怪的错误。下面是完整的代码:

#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
class MyClass
{
public:
    int _i;
    MyClass(int arg) : _i(arg) { }
};
class MyClassPtr
{
public:
    boost::shared_ptr<MyClass*> _shptr;
    //constructor using initialization list
    MyClassPtr(boost::shared_ptr<MyClass*> arg) : _shptr(arg) { }
};
int main()
{
    boost::shared_ptr<MyClass> sp(new MyClass(123));
    //error C2664: 'MyClassPtr::MyClassPtr(boost::shared_ptr<T>)' : 
    //  cannot convert parameter 1 
    //  from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'
    MyClassPtr mc(sp); 
    return 0;
}

我不明白错误信息中说"from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'"的部分。我如何设置_shptr变量在MyClassPtr构造函数?

我使用Boost 1.54

其中一个是shared_ptr<MyClass>,一个是shared_ptr<MyClass*>

可能是编译器错误信息告诉你的,你误读了