为什么在将对象添加到向量时会出现以下编译器错误,该向量的数据成员是否引用了另一个对象?
编译错误:
错误1错误C2582:'产品'中的'operator ='功能不可用c:\ program files \ microsoft visual studio 8 \ vc \ include \ xutility 2726
在程序中,我在创建新的Product对象之前收集所有数据,
然后,创建对象并将所有数据传递给构造函数:
问题出在push_back(p)行,
vector<Product> productsArr;
vector<string> categoriesArr;
class Product
{
private:
string m_code;
string m_name;
string& m_category_ref;
string m_description;
double m_price;
Product();
public:
Product(const string& code,const string& name,string& refToCategory,
const string& description, const double& price):m_category_ref(refToCategory)
{
m_code = code;
m_name = name;
m_description = description;
m_price = price;
}
}
void addProduct()
{
string code,name,description;
double price;
int categoryIndex;
getProductData(code,name,price,categoryIndex,description);
Product p(code,name,categoriesArr[categoryIndex],description,price);
productsArr.push_back(p);
}
来自xutility的一行:
// TEMPLATE FUNCTION fill
template<class _FwdIt, class _Ty> inline
void __CLRCALL_OR_CDECL _Fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
{ // copy _Val through [_First, _Last)
_DEBUG_RANGE(_First, _Last);
for (; _First != _Last; ++_First)
*_First = _Val;
}
答案 0 :(得分:6)
对象必须是可分配的(需要operator =)才能与STL容器一起使用。
没有编译器生成的operator =,因为你有一个引用(m_category_ref)作为成员。
答案 1 :(得分:1)
您必须为您的类编写operator =函数,就像编译器告诉您的那样。
你应该阅读这个链接。这是在C ++中复制的一个非常好的总结
答案 2 :(得分:0)
您添加到STL-Containers的对象必须是Assignable