二进制 '=':未找到采用 'const Thing' 类型的左操作数的运算符

Binary '=': no operator found which takes a left-hand operand of type 'const Thing'

本文关键字:类型 Thing 运算符 const 操作数 二进制      更新时间:2023-10-16

我已经阅读了重复项,但确实没有帮助我。

我正在尝试达到下一个行为。具有对 {Thing, set < Thing >}组成的矢量我想要{Thing, newSetOfThing < Thing >}的最终结果在哪里"新闻网"是彼此应用的差异在矢量中设置,但他本人。差异意味着拥有所有值,但包含在其他集合中。我正在使用std::set_difference

给出一个更接近的示例。

vector = {[1, {3,4,5,7}], [2,{1,3,9}], [3, {1,2,12}]};

==>

vectorResult = {[1, {4,5,7}], [2, {9}], [3, {2,12} } 

然后我的代码看起来像这样:

class Thing {
public:
    Thing () {
    };
    ~Thing () {};
    int position; //id
    bool operator<(const Thing &Other) const;
};
bool Thing::operator<(const Thing &Thing) const
{
  return(Other.position<position);
}
//The original vector
vector<pair<Thing, set<Thing>>> pairWithSet;
// I fill vector here [...]
// variable I define to store partial results
set<Thing> differenceResult;
// Vector I want to fill for results
vector<pair<Thing, set<Thing>>> newPairWithSet;
// Operation 
for (pair<Thing, set<Thing>> currentPair : pairWithSet){
    Thing currentThing= currentPair.first;
    differenceResult = currentPair.second;
    for (int i=0; i<pairWithSet.size();i++) {
       if (pairWithSet[i].first.position != currentThing.position) {
    set_difference(differenceResult.begin(),
                   differenceResult.end(),
                   pairWithSet[i].second.begin(),
                   pairWithSet[i].second.end(),
                   differenceResult.begin());
}
         newPairWithSet.push_back(pair<Thing, set<Thing>>(currentThing, differenceResult));
}

我向您解释我的目标有一个要去的要点,但最后我认为问题与我使用set_difference操作有多么错误,而我无法直接分配"事物"。因此,set_difference无法检查它们是否相同。因为错误是

二进制'=':找不到操作员,它采用类型的左手操作数 " const事物"(或没有可接受的转换

我说,因为也许还有其他错误可以达到行为,因为在解决操作员问题之前,我仍然无法调试。

我的问题是我是否需要声明" ='操作以及如何"。或者,如果我错过了什么,我需要通过另一种方式表演。

我可以确保问题是当我使用set_difference时,如果我评论此部分编译器,请执行任务:

 set_difference(differenceResult.begin(),
                       differenceResult.end(),
                       pairWithSet[i].second.begin(),
                       pairWithSet[i].second.end(),
                       differenceResult.begin());

我认为是因为最后它试图执行const的作业(因为std::pair声明?),因为它说了错误(显然,编译器不知道如何操作)。因此,我不清楚如何执行递归set_difference。

set_difference将结果写入其第5个参数指向的位置。您正在传递differenceResult.begin()什么问题,因为begin的CC_7总是返回 const Iterator 。您不能在const迭代器指向目标对象的地方写操作。

如果要将Thing对象存储到set_difference的CC_11算法中,则可以使用std::inserter

        set<Thing> res;  // CREATE EMPTY SET
        set_difference(differenceResult.begin(),
          differenceResult.end(),
          pairWithSet[i].second.begin(),
          pairWithSet[i].second.end(),
          std::inserter(res,res.begin())); // CREATE INSERT_ITERATOR WHICH INSERTS THINGS INTO RES

然后您可以将res复制到newPairWithSet