将对象添加到向量时编译器错误

时间:2009-11-30 12:47:15

标签: c++ visual-studio

为什么在将对象添加到向量时会出现以下编译器错误,该向量的数据成员是否引用了另一个对象?

编译错误:

错误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;    
} 

3 个答案:

答案 0 :(得分:6)

对象必须是可分配的(需要operator =)才能与STL容器一起使用。

没有编译器生成的operator =,因为你有一个引用(m_category_ref)作为成员。

答案 1 :(得分:1)

您必须为您的类编写operator =函数,就像编译器告诉您的那样。

你应该阅读这个链接。这是在C ++中复制的一个非常好的总结

http://en.wikipedia.org/wiki/Assignment_operator_in_C%2B%2B

答案 2 :(得分:0)

您添加到STL-Containers的对象必须是Assignable