C ++中的复制分配失败

时间:2019-04-09 21:41:06

标签: c++

我尝试使用带拷贝分配的结构,但这给了我一些错误。

struct Data {
  unsigned short xx;
  unsigned short yy;
  std::map<int, vector<int>> map;
  bool operator<(....& rhs) const 
  {
      ......
  }

   bool operator==(....& rhs) const 
   {
    return xx == rhs.xx && yy == rhs.yy;
  }


  Data& operator=(const Data& rhs) {
    if (this != &rhs) {
      xx = rhs.xx;
      yy = rhs.yy;
      for (int i = 0; i < 20; i++){
        vector<int> temp;
        vector<int> tempC = rhs.map[i];
        for (int j = 0; j < tempC.size(); j++){
            temp.push_back(tempC[j]);
        }
        map[i] = temp;
      }
    } 
    return *this;
} 


}; 

错误消息:

Error: passing 'const std::map<int, std::vector<int> >' as 'this' argument discards qualifiers [-fpermissive]

那怎么了?

1 个答案:

答案 0 :(得分:3)

违规行是

vector<int> tempC = rhs.map[i];

问题:std::map::operator[]是非const,因为如果给定键不存在任何值,它将插入一个值。但是您的rhsconst。您需要使用find而不是[]

由于std::map具有副本分配运算符,因此std::vector也完全不需要整个循环。因此,实际上您可以按成员分配。或者,更好的是,按照注释中的建议进行操作,并实现复制和交换的习惯用法。