gpt4 book ai didi

c++ - c++中没有参数的数组

转载 作者:行者123 更新时间:2023-11-30 01:15:44 25 4
gpt4 key购买 nike

虽然我对 java 有点经验,但我是 c++ 的新手,我的问题是下一个问题:

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

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

此代码允许我创建具有我想要的维度的 Box 数组,因为它在板构造函数中,而不是在创建时它具有作为参数的框数,但它不允许我使用“casilla”类的其他部分或其他类中的变量:

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 代码是这样的:

类卡西拉{

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。但是,作为草稿,它是有效的。

关于c++ - c++中没有参数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27975061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com