不匹配“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
s 设置为空。他们有一个 default constructor 可以自动完成。您可以简单地删除整个 for
循环。
我还建议对 m_nMax
和 m_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
循环即可。
这是导致以下错误的代码:
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
s 设置为空。他们有一个 default constructor 可以自动完成。您可以简单地删除整个 for
循环。
我还建议对 m_nMax
和 m_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
循环即可。