二进制“=”: 没有找到接受“const triangle”类型的左操作数的运算符(500元酬谢)

C++语言 码拜 8年前 (2016-05-18) 1196次浏览
朋友问的,本人也不太懂C++,所以请C++版的牛人们帮帮忙
错误 1 error C2678: 二进制“=”: 没有找到接受“const triangle”类型的左操作数的运算符(或没有可接受的转换) d:\program files (x86)\microsoft visual studio 11.0\vc\include\algorithm 1799 1 Project1
代码就2个文件 传了网盘
http://pan.baidu.com/s/1pJ135xT
第一个解决的500元酬谢 钱不多 意思一下 可以的话加QQ 1三6520六3
解决方案

20

这里面代码要是他本人写的,完全不需要问啊。

60

是选择的容器造成的。
triangleSet 是 std::multiset<triangle>,后者的 iterator type 包含的对象类型是 const-qualified 的,即 *(workset.begin/end) 得到的类型是 const triangle.
remove_if 的实现中会用到赋值,这要就造成 a = b 而 a 是 const triangle 类型,因此报错。
纯粹从语法讲,给 triangle 增加这样的赋值函数就能够通过编译。

 void operator = (triangle const&) const // note it"s a const member function
 {
 }

但显然语义是不正确的。
原因还是在于容器的选择。multiset 一般都基于平衡二查树实现,此时 triangle 是其键值类型,因此不能随便修改,否则数据结构的 invariant 就破坏了,为了避免这样,multiset 的 iterator 指向的元素都是不能修改了,和 remove_if 对迭代器的要求冲突。

20

引用:

朋友问的,本人也不太懂C++,所以请C++版的牛人们帮帮忙
错误 1 error C2678: 二进制“=”: 没有找到接受“const triangle”类型的左操作数的运算符(或没有可接受的转换) d:\program files (x86)\microsoft visual studio 11.0\vc\include\algorithm 1799 1 Project1
代码就2个文件 传了网盘
http://pan.baidu.com/s/1pJ135xT
第一个解决的500元酬谢 钱不多 意思一下 可以的话加QQ 1三6520六3

把代码上全点啥,兄弟 or 姐们


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明二进制“=”: 没有找到接受“const triangle”类型的左操作数的运算符(500元酬谢)
喜欢 (0)
[1034331897@qq.com]
分享 (0)