2013-03-01 92 views
1

我想返回一个'房间'对象的二维数组作为一种打印/显示数组中的内容。C++从类方法返回对象数组

Room* m_map[10][10]; 

产生像这样:

//Initialise array to NULL 
for(int x=0;x<10;x++) 
{ 
    for(int y=0;y<10;y++) 
     m_map[x][y] = NULL; 
} 

for(int n=0; n<10; n++) 
{  
    for(int ran=0; ran<3; ran++) 
    { 
     int r_n = rand() % 10 ; 

     Room* r = new Room(n, "Normal", true, false, false, true); 
     m_map[r_n][n] = r; 
    }  

} 

那么,这给房间是在阵列中的散射。

然后我想显示/打印这些房间的用户,引用NULL。

所以我可以例如如果NULL显示'#',如果它是一个房间留下一个''。

我不确定我应该在方法中返回的位。

任何帮助或指向正确的方向将真正理解

+0

你简直不能从函数返回数组或将数组传递给函数。在这些情况下,数组将降级为指向第一个元素的指针。 – 2013-03-01 18:48:14

+0

目前还不清楚该功能如何与您提到的此打印/显示相关。你能澄清一下吗?另外,这个函数是一些包含数组的类的成员函数吗? – juanchopanza 2013-03-01 18:51:21

+0

在C++中使用C风格的数组有点遗漏了C++的要点。 – tadman 2013-03-01 18:55:41

回答

7

这将是更容易使用的std::array<Room, N>如果阵列是固定的尺寸(和大小是在编译时已知的),或一个std::vector<Room>如果它不是。

#include <array> // or <tr1/array> if no C++11 

std::array<Room, TheSize> returnArray() const 
{ 
    return m_map; 
} 

不过要小心,根据不同的使用情况,您可能想返回一个参考,而不是一个副本:

const std::array<Room, TheSize>& returnArray() const 
{ 
    return m_map; 
} 

这就是说,如果你想要做的就是打印一些对象,然后不公开实现细节,如数组。您可以提供打印功能ot,更好的是,覆盖您的类型的std::ostream& operator<<

// inside your class declaration: 
friend 
std::ostream& operator<<(std::ostream& o, const MyClassWithRooms& r) 
{ 
    // loop over r.m_map and print to o 
} 

编辑如果阵列是二维(如在注释中提到),然后有选择:嵌套阵列结构(std::array<std::array<T,N>,M>或“平坦” N*M阵列,和具有索引一些仔细演奏)。

编辑2:如果你需要存储的东西可以设置或没有,你可以使用数组或的std::unique_ptr<Room>,而不是普通的老Room S的原料Room*载体。另一种选择是简单地使用2D地图,即std::map<int, std::map<int, Room>>

+1

最好不要暴露它。但是提供一种打印方法。 – 2013-03-01 18:47:28

+0

@LokiAstari确实。我没有真正读过这个问题... – juanchopanza 2013-03-01 18:49:45

+0

这是一个二维数组,我回来了,作为一个10×10的网格......我该如何使用它?对不起,我没有说过,我会编辑这篇文章。 – Springfox 2013-03-01 18:50:46

0

最简单的方法是使用std::vector<Room>作为阵列。这样您就不必担心内存管理,并且该大小已内置到数组中。