我正在尝试用C ++制作一个填充算法,所以我的计划是制作一个2D数组,然后每个项目都是一个对象,用属性来检查它周围的墙壁。
我注意到以下方式: 1 =顶部 2 =对 4 = bottem 8 =离开
所以13意味着,top / bottem / left wall
但是当我使用std::bitset<sizeof(int)> bits(w);
时,我会得到一个“预期的”;'之前'('令牌
我该如何解决?我尝试了很多东西,但它不起作用。
我的代码:
// een simpele floodfill
#include <stdlib.h>
#include <iostream>
#include <bitset>
class Hokjes {
int x;
int y;
int w;
public:
void setX(int i) { x = i; }
void setY(int i) { y = i; }
void setW(int i) { w = i; }
int getX() { return x; }
int getY() { return y; }
int getVal() { return x*y; }
std::bitset<sizeof(int)> bits(w); // error happens in this line
/* FreeSpace? */
bool Left() {
if (bits[3]) return false;
return true; }
bool Bottum() {
if (bits[2]) return false;
return true; }
bool Right() {
if (bits[1]) return false;
return true; }
bool Top() {
if (bits[0]) return false;
return true; }
};
int main() {
using namespace std;
int NrKamers;
std::cin >> NrKamers;
for (int i = 0; i<NrKamers; i++){
int SizeX;
int SizeY;
Hokjes veld[SizeY][SizeX];
std::cin >> SizeY >> SizeX;
for (int Yas = 0; Yas <= SizeY; Yas++){
for (int Xas = 0; Xas <= SizeX; Xas++){
veld[Yas][Xas].setW((Yas+1)*Xas)
veld[Yas][Xas].setX(Xas);
veld[Yas][Xas].setY(Yas);
std::cout << veld[Yas][Xas].Top() << std::endl;
}
}
std::cout << SizeY << " " << SizeX;
}
std::cout << NrKamers << std::endl;
system("pause");
return 0;
}
答案 0 :(得分:3)
这将有效:
std::bitset<sizeof(int)> bits;
您需要在构造函数中初始化它:
Hokjes::Hokjes() : bits(w) { }
答案 1 :(得分:0)
bits
:std::bitset<sizeof(int)> bits;
w
和
bits
同步bits = i;
在SetW
方法中(甚至是松散的
w
成员完全和工作
直接在bits
)。