【发布时间】:2021-05-18 13:54:29
【问题描述】:
我得到错误:
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\xstddef(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 Community 2019。我尝试将虚拟“
【问题讨论】:
-
不相关:
inline对于类定义中定义的函数是隐式的,所以你的是不必要的。 (它与函数调用的内联无关。) -
您的比较运算符不是 const,但它必须是。
-
operator<应该是const(operator==也是如此)。