我创建了一个函数,并希望该函数返回一个二维指针数组。
但是我尝试了很多方法,编译器给了我错误。
这是我的函数,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/