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

时间:2014-05-28 18:50:33

标签: c++ visual-studio-2010 boost shared-ptr

我有一个包含另一个类的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;
}

我不理解错误消息中标有&#34; from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'&#34;的部分内容。如何在MyClassPtr构造函数中设置_shptr变量?

我正在使用Boost 1.54

1 个答案:

答案 0 :(得分:4)

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

据推测,编译器错误消息会告诉您,并且您正在误读它。