我对c++相当陌生,尽管对Java有一定的经验,但我的问题是下一个:

我正在做一个数独项目,在其中创建盒子和板子的抽象数据类型。在第一个开发板中,我正在创建一个由盒子组成的数组,但是当我想将其创建为公共(public)数据时,可以在整个类中使用它,而不仅是在开发板构造函数中使用。

我要在电路板构造函数中创建它,因为如果不在那里创建它,我将无法知道每个维度的值,并且如果我创建了Box box[int][int]变量,可以在类中使用它,无法知道尺寸。使用一些代码会更好理解。

这段代码允许我用所需的尺寸创建Box数组,因为它位于板构造器中,而不是创建时具有框数的参数,但是不允许我在其中使用“casilla”变量该类(class)的其他部分或其他类(class):

class tablero{

    int filas;
    int columnas;

public:


    tablero (int filas, int columnas){

    this->filas = filas;

    this->columnas =columnas;
    Casilla casilla[filas][columnas];


    }
    Casilla getCasilla(int n, int m){
        return casilla[n][m];  <- Here shows an error because casilla cannot be resolved.

    }

其他代码使我可以使用casilla变量,但是在知道它们之前,必须将其参数赋予尺寸:
class tablero{

    int filas;
    int columnas;

public:
    Casilla casilla[0][0];

    tablero (int filas, int columnas){

    this->filas = filas;

    this->columnas =columnas;



    }
    Casilla getCasilla(int n, int m){
        return casilla[n][m];

    }

没错,但是在我知道它们之前,必须先给出casilla阵列的尺寸,因此,它们可能是错误的(因为电路板的尺寸可能不同)。

这是我第一次使用C++进行编程,而我对此问题感到非常沮丧,有人可以帮助我找到一种使之可行的方法,从而使其同时起作用吗? (我已经尝试将两个维度都留空,然后在构造函数中放入casilla[][] = Casilla cas[filas] [columnas],但它给了我一个错误。)

感谢大家的帮助。另外,如果您认为标题不够清楚,可以提出一个建议,我将对其进行更改。

Casilla代码是这样的:

Casilla类{
int fila;

int columna;

int numero;

   public:

      // constructor

      Casilla(int fila, int columna,int numero)
      {
          this->fila = fila;

          this->columna = columna;

          this->numero = numero;


      }

};

感谢大家的回答,我已经从3个不同的人那里找到了所需的答案。我无法对所有人进行投票,因为我仍然没有15个声誉,但是当我拥有它时,我将对所有人进行投票。真的,感谢您的所有回答。我只需要知道我对已检查答案的评论即可,所有答案都将得到回答。

最佳答案

数组解决方案

//----------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
//----------------------------------------------------------------------------
class Casilla
{
    int fila;
    int columna;
    int numero;

   public:

      // default constructor
      Casilla()
      {
          this->fila = -1;
          this->columna = -1;
          this->numero = 0;
      }

      int GetNumero() {return numero;}
      void SetCasilla (int _fila, int _columna) //set a cell position
      {
          fila = _fila;
          columna = _columna;
      }
      void SetCasilla (int _numero)             //set a cell value
      {
          numero = _numero;
      }
      void SetCasilla (int _fila, int _columna, int _numero) //set a cell position and value
      {
          fila = _fila;
          columna = _columna;
          numero = _numero;
      }

};

class Tablero
{
    int filas;
    int columnas;
    Casilla **casilla;

public:

    Tablero (int filas, int columnas)
    {
        this->filas = filas;
        this->columnas =columnas;
        casilla = new Casilla* [filas];
        for (int i = 0; i<filas; i++)
          casilla[i] = new Casilla [columnas];

        for (int i = 0; i<filas; i++)
            for (int j = 0; j<columnas; j++)
                casilla[i][j].SetCasilla(i,j);  //set the right position for each cell
                                                //the values = 0 by default
    }

    //destructor
    ~Tablero()
    {
        for (int i = 0; i<filas; i++)
            delete [] casilla[i];
        delete [] casilla;
    }

    //set a cell value in the table
    void ChangeCasillaValue (int _fila, int _columna, int _numero)
    {
        casilla[_fila][_columna].SetCasilla (_numero);
    }


    Casilla getCasilla(int n, int m)
    {
        return casilla[n][m];
    }

    void PrintTablero ()
    {
         for (int i = 0; i<filas; i++)
        {
            for (int j = 0; j<columnas; j++)
                  std::cout << std::setw(5)<<casilla[i][j].GetNumero();
            std::cout << "\n";
         }
         std::cout << "\n";
    }
};


//----------------------------------------------------------------------------
int main()
{
    int N = 5, M = 6;
    Tablero table(N, M);
    table.PrintTablero();

    table.ChangeCasillaValue(1,1,-5); //change value in cell(1,1)
    table.PrintTablero();

    std::cin.get();
    return 0;
}
//-----------------------------------------------------------------------------

您必须添加一堆自己的setter和getter。
但是,作为草稿,它可以工作。

10-06 08:36