ошибка набора битов c ++ в классе - PullRequest
1 голос
/ 08 мая 2011

Я пытаюсь создать алгоритм заливки в C ++, поэтому я планировал создать двумерный массив, а затем каждый элемент был бы объектом со свойством для проверки стен вокруг него.

Iобратите внимание на стены следующим образом: 1 = верхняя 2 = правая 4 = нижняя часть 8 = левая

, так что 13 будет означать верхняя / нижняя / левая стена

, но когда я использую 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;

}

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Это будет работать:

std::bitset<sizeof(int)>   bits;

Вам нужно будет инициализировать его в конструкторе:

Hokjes::Hokjes() : bits(w) { }
0 голосов
/ 08 мая 2011
  1. Вы не можете инициализировать переменные-члены в точке объявления.Так что просто объявите bits: std::bitset<sizeof(int)> bits;
  2. Поскольку похоже, что вы хотите синхронизировать w и bits, просто выполните bits = i; в методе SetW (или даже потеряйте w участник в целом и работает непосредственно на bits).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...