繁体   English   中英

'boost::shared_ptr::operator=' 不匹配

[英]No match for ‘boost::shared_ptr::operator=’

这是我拥有的导致以下错误的代码:

class CAlternateMerchantList
{
public:
    CAlternateMerchant::SP m_pAlternateMerchantList[MAX_PLAYER_LIST];
    int m_nMax;
    int m_nCur;

    CAlternateMerchantList()
    {
        int i;
        for (i = 0; i < MAX_PLAYER_LIST; i++)
            m_pAlternateMerchantList[i] = NULL;
        m_nMax = 0;
        m_nCur = 0;
    }

我得到的错误如下:

PersonalShop.h: In constructor ‘CAlternateMerchantList::CAlternateMerchantList()’:
PersonalShop.h:227: error: no match for ‘operator=’ in ‘((CAlternateMerchantList*)this)->CAlternateMerchantList::m_pAlternateMerchantList[i] = 0’
/usr/local/include/boost-1_65_1/boost/smart_ptr/shared_ptr.hpp:547: note: candidates are: boost::shared_ptr<T>& boost::shared_ptr<T>::operator=(const boost::shared_ptr<T>&) [with T = CAlternateMerchant]

如您所见,我正在使用boost 1_65_1库。 如果我没记错的话,这段代码在另一个带有boost 1_59的系统上工作,但目前我无法访问它进行测试。

有谁知道如何使此代码与 boost 1.65 一起使用? 或者,这里还有其他问题吗?

您不需要将boost::shared_ptr设置为 null。 他们有一个默认的构造函数,它会自动完成。 您可以简单地删除整个for循环。

我建议还使用m_nMaxm_nCur初始化列表

CAlternateMerchantList()
    : m_nMax(0), m_nCur(0)
{
}

您可能正在为较旧的 C++ 版本进行编译,这从您的编译器不了解nullptr是什么很明显。

在 C++11 之前, NULL是整数文字0的别名,可以将其分配给原始指针,但boost::shared_ptr不能分配整数。

在 C++11 及更高版本中, NULL (通常)是nullptr关键字的别名,并且boost::shared_ptr可以从nullptr分配和构造。

在任何情况下,正如John Kugelman 解释的那样,您不需要将数组的智能指针元素初始化为NULL / nullptr ,因为它们已经通过boost::shared_ptr的默认构造函数为您初始化为该状态。 因此,只需完全删除您的for循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM