【发布时间】:2020-08-07 02:53:20
【问题描述】:
我正在为学校做一个单词搜索拼图,我面临的问题如下。
我正在尝试用随机字符填充二维数组,这并不难,但是当你引入类和指针时......它会变得混乱。所以我有一个名为 Char 的类,它的功能是生成随机字符以存储在 Board 类中的二维数组中。
class Char
{
private:
char Letters;
public:
Char();
Char(char let);
~Char();
void Set_Letters(char let) { Letters = let; }
char Get_Letters(void) { return Letters; }
void Random(void);
void View(void);
};
class Board
{
private:
int BoardWidth;
int BoardHeight;
int numWords;
Char** Caracters;
Point P; //This is ponting to an other class called Point, it keeps track of the location of the Words that were read from the txt file
public:
Board(void);
~Board();
void Init(int Dx, int Dy);
inline void Set_BoardWidth(int bW) { BoardWidth = bW; }
inline void Set_Boardheight(int bH) { BoardHeight = bH; }
};
所以这些是重要的类。在 Board 类中,我用来存储二维数组的变量是 Char**,我什至不知道这是否是正确的方法。 这些是 Char 类中函数背后的相关代码:
void Char::Random()
{
//The unsigned int is used to silence the error : "Possible loss of data"
srand((unsigned int)time(NULL));
Set_Letters('A' + (rand() % 26));
}
这会创建随机字符,这是应该将字符保存在二维数组中的部分。
void Board::Init(int Dx, int Dy)
{
Set_BoardWidth(Dx);
Set_Boardheight(Dy);
Char Letter;
int n = 0, m = 0;
for (int j = 0; j < Dy; j++)
{
for (int i = 0; i < Dx; i++)
{
//Fill the array with random char´s
Letter.Random();
**Caracters = Letter.Get_Letters();
//In this part im attributing a x and y value to the char
P.Set_x(n); P.Set_y(m);
n++; m++;
}
}
}
它给我的错误是:
"抛出异常:读取访问冲突。
this->Caracters was nullptr"。
我试图在 Board 类中创建一个字符串来存储它,但它似乎不起作用,由于某种原因,当我使用它时,该类甚至无法识别该变量。还尝试使用char**,给了我同样的错误。
仅此而已,没有尝试其他任何方法。看了一段视频后,它让我想到了使用矢量,但我还没有尝试过。
我在上个学期刚学完 C,我觉得我还是太沉迷于它。而且我很难将它们分开。因此,如果您对我可以如何变得更好以及我可以改进什么以及我的代码编写方式有任何建议,请告诉我。
【问题讨论】:
-
您从未在代码中分配任何内存。为什么一开始还要使用指针和手动动态内存分配?
-
我并不惊讶你会感到困惑,生成随机字符的类是大量的矫枉过正。只需编写一个函数即可。并非所有事情都必须通过课程来完成。为工作使用正确的工具。
-
我不知道,不知怎的,我认为它可能会起作用?
-
问题是我们有一个要遵循的协议,我需要那个类。至少老师说它在那里。如果我不能解决这个问题,我很可能不得不走这条路