二进制 '=':未找到采用 'const Thing' 类型的左操作数的运算符
Binary '=': no operator found which takes a left-hand operand of type 'const Thing'
我已经阅读了重复项,但确实没有帮助我。
我正在尝试达到下一个行为。具有对 {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
。
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 二进制 '=':未找到采用 'const Thing' 类型的左操作数的运算符