没有匹配'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的系统上运行,但目前我无法访问它进行测试。

有人知道如何让这个代码与boost1.65一起工作吗?或者,这里还有其他问题吗?

您不需要将boost::shared_ptrs设置为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循环即可。

最新更新