Clang 输出错误"no matching construct for initialization"

Clang outputs error "no matching construct for initialization"

本文关键字:construct for initialization matching no 输出 错误 Clang      更新时间:2023-10-16

使用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

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

@Joachim建议您的ctor需要一个指针
传递一个共享指针(或弱指针,具体取决于您的用例)可能会更好,这样可以将指针保存在内存中。