【问题标题】:What is wrong with my shared_ptr initialization list code? [closed]我的 shared_ptr 初始化列表代码有什么问题? [关闭]
【发布时间】:2014-05-28 18:50:33
【问题描述】:

我有一个包含指向另一个类的 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&lt;T&gt;' to 'boost::shared_ptr&lt;T&gt;'”的部分。如何在 MyClassPtr 构造函数中设置 _shptr 变量?

我正在使用 Boost 1.54

【问题讨论】:

  • 类的构造函数中的参数arg 应该是boost::shared_ptr&lt;MyClass&gt; 类型,对吧?它是一个指针的事实是隐含的。

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


【解决方案1】:

其中一个是shared_ptr&lt;MyClass&gt;,一个是shared_ptr&lt;MyClass*&gt;

大概是编译器错误信息告诉你的,而你误读了它。

【讨论】:

  • 我刚刚注意到了。谢谢。其实我现在有点尴尬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
相关资源
最近更新 更多