[英]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 一起使用? 或者,这里还有其他问题吗?
您可能正在为较旧的 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.