错误 C2678:未找到采用类型为 'const _Ty' 的左侧操作数的运算符
error C2678: no operator found which takes a left-hand operand of type 'const _Ty'
我得到错误:
1>C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.28.29910includexstddef(127,1): error C2678: binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)
当我运行代码时:
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <iomanip>
#include <map>
#include <bitset>
#include <cstring>
#include <queue>
#include <math.h>
using namespace std;
class grid {
private:
public:
vector<vector<short> > tiles;
grid()
{
tiles.resize(4);
for (int i = 0; i < 4; i++)
tiles[i].resize(4);
}
inline bool operator==(grid& b)
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
if (tiles[i][j] != b.tiles[i][j])
return false;
return true;
}
inline bool operator<(const grid& b)
{
return false;
}
void shiftUp()
{
for (int k = 0; k < 4; k++)
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
if (tiles[j][i] == 0)
swap(tiles[j][i], tiles[j + 1][i]);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
if (tiles[j][i] == tiles[j + 1][i])
{
tiles[j][i] *= 2, tiles[j + 1][i] = 0;
break;
}
}
}
for (int k = 0; k < 4; k++)
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
if (tiles[j][i] == 0)
swap(tiles[j][i], tiles[j + 1][i]);
}
};
map<grid, bool> used;
bool exists(grid x)
{
return used[x];
}
int main()
{
grid x;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
cin >> x.tiles[i][j];
x.shiftUp();
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
cout << x.tiles[i][j] << " ";
cout << endl;
}
}
我正在使用Visual Studio社区2019。我已尝试添加dummy'<'运算符添加到类中,但没有找到任何其他适用于我的线程。
std::map
默认使用std::less
进行比较,默认使用operator <
。因此,实现该运算符是正确的。
然而,该错误表明没有operator <
取const
左手侧。你需要一个常量版本:
class grid {
// ...
bool operator < (const grid &o) const { // Note *const* at end
// Do something meaningful here
}
}
阅读有关常量正确性的信息(例如,此处(。
还要注意,运算符<需要提供严格的弱排序,所以如果是a < b == true
,则必须是b < a == false
相关文章:
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 错误 C2678:二进制"+":未找到采用类型 'volatile A' 的左侧操作数的运算符(或者没有可接受的转换)
- 为什么我得到"C2678 二进制'+':没有找到采用类型为"const 的左操作数......"的运算符。"在这种情况下?
- 在定义C2679和C2678错误代码的地方未找到二进制操作员
- 错误 c2678:二进制'=='
- 错误C2678 C A*路障
- 错误 C2678:二进制'==':找不到采用 'std::pair<const _Kty,_Ty>' 型左操作数的运算符
- (错误 C2678)错误:没有运算符"<<"与这些操作数匹配
- c++找不到带错误c2678的运算符
- 错误 C2678:二进制'>':找不到采用左侧操作数的运算符
- 错误 C2678:二进制">>":找不到采用类型为"std::basic_istream<_Elem,_Traits>"的左操作数的运算符
- 错误 C2678:二进制">>":找不到采用类型为"std::stringstream "的左操作数的运算符
- unordered_set<reference_wrapper<Ty>>有效吗?
- 派生类函数参数作为基类引用导致C2678
- 错误 C2678:'=='二进制:未找到采用类型 'CSchemaString' 的左操作数的运算符(或者没有可接受的转换)
- 使用模板时出现错误C2678
- 比较未引用的映射迭代器(std::pairs):C2678
- 迁移到 VS2013 比较运算符 错误 C2678:二进制"=="无运算符
- 从自定义数据类型列表中删除时出现 C2678 错误
- 错误 C2678:二进制'==':找不到采用左侧操作数的运算符