Clang输出错误"没有匹配的构造用于初始化"

时间:2013-09-03 13:04:02

标签: c++ boost c++11 clang++

使用clang-425.0.27(基于LLVM3.2svn)编译此代码段:

class CStorage
{};

typedef boost::shared_ptr< CStorage >  AccessorPtr;

class CTest
{
public:
  CTest( const CStorage &rAccessor )
    : m_Accessor( rAccessor ){}
private:
  AccessorPtr m_Accessor;
};

获取编译错误:

**error**: no matching constructor for initialization of 'AccessorPtr' (aka 'shared_ptr<CStorage>')
                        : m_Accessor( rAccessor ){}

**note**: candidate constructor (the implicit copy constructor) not viable: no known conversion from
      'const FNPNS::TSM::CDirectBlockAccessor' to 'const boost::shared_ptr<FNPNS::TSM::CDirectBlockAccessor>' for 1st argument
template<class T> class shared_ptr

2 个答案:

答案 0 :(得分:3)

boost::shared_ptr构造函数想要一个指针,你传给它一个引用。您可能希望更改自己的构造函数以获取指针,或者使用引用在堆上创建新的CStorage对象。

答案 1 :(得分:1)

正如@Joachim建议你的ctor期待一个指针  传递一个共享指针(或一个弱指针,取决于你的用例)可能会更好,这将把指针保存在内存中。