【发布时间】:2014-06-11 17:24:54
【问题描述】:
(如果有问题,我很抱歉,这是我的第一个问题)
我正在尝试为我的游戏创建一个房间网格(类似于以撒的绑定)。
我有一个名为“Station”的指挥类,我希望在其中有一个 2D 房间数组,我在我的类“房间”中定义了它。 在我的 main.cpp 中,我使用了一个名为 currentroom 的 Room 对象,我想通过引用来传递我的 Station 类中的函数 loadRoom。该函数将生成数组中的所有房间,并通过引用将中间的房间传回 main.cpp。 我一直在努力让它与向量、数组、指针数组甚至是专门为存储房间目的而设计的新类一起工作,但似乎没有任何效果。请帮助我,这些是我之前提到的两个课程: Station.h:
#pragma once
#include "The Station.h"
class Station
{
public:
void pause();
void resume();
int h,w;
Station();
sf::RenderWindow App;
sf::Image guii;
sf::Texture player, bgt, guit, fltilt;
sf::Font arial;
void loadSection(Room& currentroom);
};
房间.h:
#pragma once
#include "The Station.h"
#define n 16
#define m 6
class Station;
class enemy;
class projectile;
class Room
{
public:
tile floortile[n][m];
sf::Texture floort,enemyt, dleftt,sht, drightt,dtopt,dbottomt, chestt;
int chest_max=15;
int chestcount;
bool dleft, dright,dtop,dbottom,isempty;
Room();
void loadroom(int w, int h);
std::vector <enemy> enem;
std::vector <projectile> proj;
void spawn_enemy(int x,int y);
};
我希望第一个拥有后者的数组。 谢谢。
编辑: 好的,这就是我得到的: 当我简单地尝试制作这样的二维数组时:
Room sect[10][10];
我把它放在 void loadSection 之前的一个类中,它在运行后一秒钟就崩溃了。 当我在同一个地方创建一个名为“lvl”的 Section 类对象时,它只会在我尝试访问 Room 的成员时崩溃,如下所示:
this->lvl->Row[5].Column[5].loadroom(this->w,this->h);
但是,当我创建一个向量向量时,如下所示:
std::vector< vector< Room > > station;
当我尝试调整它的大小时它会崩溃,无论我是使用初始化程序、push_back 还是 vector::resize。
错误总是一样,Application.exe 停止工作。
有什么想法吗?
【问题讨论】:
-
欢迎来到 SO!为了提供帮助,我们需要有关问题出在哪里(以及适当的代码和输出)的更具体的信息。例如,是否有正确通过引用传递或找到中间的问题?
-
问题是当我运行它时,它会停止工作,除非我从 Station 类中删除数组。没有构建错误。 (在上面的代码中,我没有包含我尝试过的任何二维数组版本,但是所有这些版本要么使程序在运行后停止工作一秒钟,要么导致运行时错误(不寻常的方式和这种东西)。
-
@user3104621 请在您的问题中添加任何重要信息。把它当作评论没什么用。
-
这些信息够不够,因为我不知道还能说什么。
-
最可能的原因是您尝试访问二维数组边界之外的元素。为了找到代码的错误部分,您应该给我们一个最小的示例(请参阅stackoverflow.com/help/mcve)。此外,如果您的调试器没有为您提供导致崩溃的代码行,您可能应该只逐步执行代码(一次一条指令)。