C ++通过引用传递一个位域数组

时间:2014-10-04 16:53:35

标签: c++ arrays function struct reference

我尝试将地图渲染(控制台,ASCII)放到一个函数中,但它不能编译。 它应该是这样的:

struct tiles {
    unsigned is_visible : 1;
    //...
} tile[y][x];

void render_map(const tiles (tile&)[y][x]) {
    for (int i = 0; i < y; i++) {
         if (tile[y].is_visible == 0) {
             //... 
         }
    }
}

int main() {
    render_map(tile);  
    //...
}

我尝试按照这个答案做:C++ pass an array by reference(const tiles(tile&amp;)[y] [x])

感谢所有,现在它的工作!

struct tiles {
    unsigned is_visible : 1;
    //...
} tile[y][x];

void render_map(const tiles (&tile)[y][x]) {
    for (int i = 0; i < y; i++) {
        for (int j = 0; j < x; j++) {
            if (tile[i][j].is_visible == 0) {
                //... 
            }
        }
    }
}

int main() {
    render_map(tile);  
    //...
}

我会考虑使用矢量。 对不起这个愚蠢的问题:)

1 个答案:

答案 0 :(得分:0)

你可以这样:

struct Tiles {
  unsigned is_visible : 1;
  //...
};

const int x = 5;
const int y = 5;
Tiles tiles[x][y];

void render_map(const Tiles tile[x][y]) {
    for (int i = 0; i < y; i++) {
      if (tile[y].is_visible == 0) { // tile is a 2d array, not a 1D, thus error
        //...
      }
    }
}

int main() {
  render_map(tiles);
    //...
}

但是,由于这是C ++,我不明白为什么你不使用std :: vector。

另请阅读this回答。

使用std :: vector,您可以执行此操作,例如:

void print_vector(std::vector< std:: vector<Tiles> >& v) {
  for(unsigned int i = 0; i < v.size(); ++i)
    for(unsigned int j = 0; j < v.size(); ++j)
      j += 0;
}

int main() {
  std::vector< std:: vector<Tiles> >v;
  v.resize(2); // make space for two vectors of tiles
  Tiles t;
  t.is_visible = 0;
  v[0].push_back(t);
  v[1].push_back(t);

  print_vector(v);
  return 0;
}