C++ C++;通过引用将2d数组传递给其他类
这个想法是MapGrid创建一个包含地图元素的2d数组,我想把这个数组交给另一个MapGenerator类,这样它就可以通过编辑其中的方形元素来生成一个真实的地图C++ C++;通过引用将2d数组传递给其他类,c++,arrays,class,reference,C++,Arrays,Class,Reference,这个想法是MapGrid创建一个包含地图元素的2d数组,我想把这个数组交给另一个MapGenerator类,这样它就可以通过编辑其中的方形元素来生成一个真实的地图 class MapGenerator { private: int MAP_HEIGHT; int MAP_WIDTH; Square * worldMap; void cmdGenerateHeightMap() {
class MapGenerator {
private:
int MAP_HEIGHT;
int MAP_WIDTH;
Square * worldMap;
void cmdGenerateHeightMap() {
worldMap[i][j]->decraseHeight();
......
}
public:
MapGenerator(Square &myMap, int maxHeight, maxWidth) {
MAP_WIDTH = maxWidth
MAP_HEIGHT = maxHeight;
worldMap = &myMap;
cmdGenerateHeightMap();
}
}
class MapGrid {
private:
static const int MAP_HEIGHT = 100;
static const int MAP_WIDTH = 100;
Square worldMap[MAP_HEIGHT][MAP_WIDTH];
public:
MapGrid() {
for (int i=0; i<MAP_HEIGHT;i++) {
for (int j=0;j<MAP_WIDTH; j++) {
worldMap[i][j] = Square();
}
}
MapGenerator myMap(worldMap);
}
void PrintMyMap() {
//print what the map MapGenerator made
}
}
类映射生成器{
私人:
int MAP_高度;
int MAP_宽度;
广场*世界地图;
void cmdGenerateHeightMap(){
worldMap[i][j]->降低高度();
......
}
公众:
MapGenerator(正方形和myMap,int maxHeight,maxWidth){
地图宽度=最大宽度
地图高度=最大高度;
worldMap=&myMap;
cmdGenerateHeightMap();
}
}
类映射网格{
私人:
静态常数int MAP_高度=100;
静态常数int MAP_WIDTH=100;
方形世界地图[地图高度][地图宽度];
公众:
MapGrid(){
对于(int i=0;i我认为您不希望在MapGrid构造函数方法中传递worldMap
,因为它尚未初始化为任何内容。交换定义MapGenerator
和MapGrid
类的顺序。您试图在MapGrid中使用MapGenerator
类代码>构造函数,但该类仅在下面进一步定义
更新:好的,既然你已经重写了你的问题,这里有另一个猜测(你的代码实际上没有编译,所以我只能猜测):是否可能MapGenerator
和MapGrid
在不同的头文件中,并且在MapGrid
的头文件中,您只有一个MapGenerator
的前向声明,而不是实际的定义(您可以通过包含MapGenerator
的头来获得该定义)?为了实例化类的对象,您需要该类的完整信息。但是在类MapGrid
中,尝试实例化MapGenerator
的对象在当前的代码段排序形式中无效。请改为尝试以下操作-
class MapGenerator
{
// .....
};
class MapGrid
{
// ....
};
下面的代码与您在评论容易出错的行之后的代码类似。您能告诉我它的实用程序是什么吗
class MapGenerator {
private:
Square * worldMap;
void cmdGenerateHeightMap() {
//do something to the orginal copy of worldMap
}
public:
MapGenerator(Square &myMap) {
worldMap = &myMap;
cmdGenerateHeightMap();
}
};
class MapGrid {
private:
static const int MAP_HEIGHT = 100;
static const int MAP_WIDTH = 100;
Square worldMap[MAP_HEIGHT][MAP_WIDTH];
public:
MapGrid() {
for (int i=0; i<MAP_HEIGHT;i++) {
for (int j=0;j<MAP_WIDTH; j++) {
worldMap[i][j] = Square();
}
}
//commented following line
//MapGenerator myMap(worldMap);
}
void PrintMyMap() {
//print what the map MapGenerator made
}
};
类映射生成器{
私人:
广场*世界地图;
void cmdGenerateHeightMap(){
//对世界地图的原始副本做些什么
}
公众:
地图生成器(方形和myMap){
worldMap=&myMap;
cmdGenerateHeightMap();
}
};
类映射网格{
私人:
静态常数int MAP_高度=100;
静态常数int MAP_WIDTH=100;
方形世界地图[地图高度][地图宽度];
公众:
MapGrid(){
对于(int i=0;i我认为MapGenerator
不需要是一个类。
可能cmdGenerateHeightMap
可以是一个独立的函数,而不是
成员函数。
或者,为了简化对二维阵列的访问,
我建议创建一个专用类,例如TwoDimArray
从MapGrid
的构造函数调用cmdGenerateHeightMap
怎么样
以下内容?:
struct TwoDimArray {
int MAP_WIDTH;
Square *worldMap;
TwoDimArray( Square* m, int w ) : worldMap( m ), MAP_WIDTH( w ) {}
Square* operator[]( int i ) const { return worldMap + MAP_WIDTH * i; }
};
void cmdGenerateHeightMap( Square *myMap, int maxHeight, int maxWidth )
{
TwoDimArray worldMap( myMap, maxWidth );
...
worldMap[i][j].decraseHeight();
...
}
class MapGrid {
...
MapGrid() {
...
cmdGenerateHeightMap( worldMap[0], MAP_HEIGHT, MAP_WIDTH );
}
};
希望这有帮助MapGenerator myMap(worldMap);“MapGrid方法中的问题是什么。好的想法是我MapGid制作默认地图。没有河流的平坦无任何东西(正方形保存该信息).MapGenerator接受默认地图并添加mountines rivers和其他类似的内容。然后它将地图返回给MapGrid以在游戏中使用。这样做了吗,真正的问题是我错误地传递了数组,我想是的,两个类都在不同的文件中。main.cpp包含header.h和in header.h,这两个类和#in都有向前声明包含到每个类头文件中。MapGeneration前向声明和#include位于MapGrid之前