我创建了一个函数,并希望该函数返回一个二维指针数组。
但是我尝试了很多方法,编译器给了我错误。
这是我的函数,cell是我定义的类。现在,我只给函数void类型。

 void CreatePuzzle (int nRows, int nColumns, int minVal, int maxVal)
{
    //initialize the puzzle
    cell *Puzzle[nRows][nColumns];

    for (int i = 0; i < nRows; i++)
    {
         for(int j=0; j < nColumns; j++)
         {
            Puzzle[i][j] = new cell(i,j);

         }
    }
}

最佳答案

这不是您问题的直接答案,但可能会有所帮助:考虑使用现代C ++。

考虑以下代码:

#include <iostream>
#include <vector>

class Cell {
 public:
  Cell(int value = 0)
      : m_value(value) { }
  int value() const {
    return m_value;
  }
  void value(int value) {
    m_value = value;
  }
 private:
  int m_value;
};

class Puzzle {
 public:
  Puzzle(int rows, int cols)
      : m_cells(rows * cols),
        m_rows(rows),
        m_cols(cols) {
    // for now let's assume we just give them a sequential value
    int value = 0;
    for(auto & cell : m_cells) {
      cell.value(value++);
    }
  }

  Cell& cell(int row, int col) {
    return m_cells[row * m_cols + col];
  }

 private:

  std::vector<Cell> m_cells;
  int m_rows;
  int m_cols;
};

int main(int argc, char* argv[]) {
  if(argc != 3) {
    std::cerr << "usage: " << argv[0] << " rows cols" << std::endl;
    return 1;
  }

  int rows = std::stoi(argv[1]);
  int cols = std::stoi(argv[2]);

  Puzzle puzzle(rows, cols);

  for(int row = 0; row < rows; ++row) {
    for(int col = 0; col < cols; ++col) {
      std::cout << puzzle.cell(row, col).value() << " ";
    }
    std::cout << std::endl;
  }
}


这是一个过分的简化,但您(希望)有个主意:我有一个Cell类,其唯一目的是保存一个值(在这种情况下为整数)。然后,我创建了一个包含N个M个单元的游戏。

游戏的构造函数明确声明:*要创建游戏,我需要您向我提供行数和列数。“在内部,它将所有单元格放置在std::vector中,并提供了一种公共方法来访问(行,列)线性排列,您自己即可简单地“跨越”数组。

希望它可以向您展示一个更惯用的C ++外观。无论如何,它都不是完美的代码,但这只是一个开始。

我在OS X 10.7.4上使用GCC 4.8.1编译了代码:

g++ game.cpp -std=c++11


会话示例:

./a.out 3 5
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14


另一个会话:

./a.out 2 10
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19


请注意,我从不必担心分配/取消分配或内存泄漏:全部由std::vector管理。

关于c++ - 如何在C++中返回二维指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26567558/

10-11 23:02
查看更多