2011-05-08 55 views
1

我想在C++中做一個洪泛算法,所以我的計劃是製作一個二維數組,然後每個項目都是一個對象,用屬性來檢查它周圍的牆。類中的C++ bitset錯誤

我注意到壁下面的方式, 1 =頂部 2 =右 4 = bottem 8 =左

所以13將意味着,頂部/ bottem /左壁

但是當我使用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; 

}

回答

3

這將工作:

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

你需要在構造函數初始化:

Hokjes::Hokjes() : bits(w) { } 
+0

啊,非常感謝你! – Buster 2011-05-08 18:34:08

+1

那麼構造函數中'w'的值是什麼? – 2011-05-08 19:20:14

+0

因此,第一行只是在編譯時計算整數的位數,對不對?它實際上並不允許在類中聲明動態大小的位集? – bhekman 2012-12-03 04:36:32

0
  1. 你不允許初始化成員在聲明點瓦爾。所以只需要聲明bitsstd::bitset<sizeof(int)> bits;
  2. 因爲它看起來像你想保持wbits同步只是做bits = i;SetW方法(甚至鬆散 的w成員乾脆直接在bits工作 )。