不匹配“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_ptrs 设置为空。他们有一个 default constructor 可以自动完成。您可以简单地删除整个 for 循环。

我还建议对 m_nMaxm_nCur 使用 initialization list

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

您可能正在为较旧的 C++ 版本进行编译,您的编译器不理解 nullptr 是什么就证明了这一点。

在C++11之前,NULL是整型字面值0的别名,可以赋值给裸指针,但是boost::shared_ptr不能赋值整数。

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

在任何情况下,如 ,您不需要首先将数组的智能指针元素初始化为 NULL/nullptr,因为它们已经初始化为boost::shared_ptr 的默认构造函数为您声明的状态。因此,只需完全删除 for 循环即可。