【发布时间】:2018-04-02 03:02:45
【问题描述】:
我正在尝试创建类对象指针的动态二维向量。我正在尝试为基于文本的游戏制作随机地图。我知道那里有解决方案,但我想亲手打造这只小狗。我只是..吸指针。
我尝试创建一个类指针的二维数组,但语法很难遵循。我真的不知道从哪里开始。我上一堂 C++ 课是一年前,我们只是简要介绍了向量。
我尝试自己进行一些研究,但我似乎无法将这些概念融合在一起。我已经能够参考以下帖子/页面:
Vector of Object Pointers, general help and confusion
http://www.cplusplus.com/doc/tutorial/pointers/
vector of class pointers initialization
https://www.geeksforgeeks.org/2d-vector-in-cpp-with-user-defined-size/
现在,我正在进行我的计划的第一步。我知道一旦我得到了 2D 矢量语法,其余的就会到位。然而,这不是我以前做过的事情。我敢肯定我的编码对大多数人来说还不够格,但已经有一段时间了......
如果我可以要求澄清以下内容,我认为这对我有很大帮助。
1.如何通过引用将 2D 向量传递给函数?正确操作其中保存的指针的语法是什么?
2。如何访问二维向量中指针的类成员函数?
3.如何动态创建二维向量中的指针指向的类对象?
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <bits/stdc++.h>
using namespace std;
enum Dir{n, e, s, w};
class Object
{
private:
string objName;
public:
void setName(string n)
{
objName=n;
}
string getName() const
{
return objName;
}
Object()
{
objName="";
}
Object(string n)
{
objName=n;
}
virtual ~Object()
{
cout << "The " << objName << " was destroyed.\n";
}
};
class Room : public Object
{
private:
Room *north, *east, *south, *west;
public:
void setDir(Room *d, Dir a)
{
switch(a)
{
case n: north=d; break;
case e: east=d; break;
case s: south=d; break;
case w: west=d; break;
}
}
Room *getDir(Dir a)
{
switch(a)
{
case n: return north; break;
case e: return east; break;
case s: return south; break;
case w: return west; break;
}
}
Room(){}
Room(string rName, Room *n, Room *e, Room *s, Room *w) : Object(rName)
{
north=n;
east=e;
south=s;
west=w;
}
};
Room Wall;
void RoomRandomizer(vector<Room *> map, string rName)
{
int x=0, y=0, entX=0, extY=0;
bool entFound = false;
Room * tempRoom;
string rN = rName;
srand(time(NULL));
if(rName == "Entrance")
{
x=rand() % 7+1;
y=rand() % 5;
tempRoom = new Room(rName, &Wall, &Wall, &Wall, &Wall);
map[x][y]= tempRoom;
}
};
int main(){
int row=9, colom[]={9,9,9,9,9,9,9,9,9};
Wall.setName("Wall");
vector<vector<Room *>> map(row);
for (int i = 0; i < row; i++) {
// size of column
int col;
col = colom[i];
// declare the i-th row to size of column
map[i] = vector<Room *>(col);
//map.resize(9, vector<Room *>(9, 0));
}
map[0][0] = new Room("Entrance", Wall, Wall, Wall, Wall);
cout << map[0][0]->getName;
return 0;
}
【问题讨论】:
-
1.添加
&。 2. 与->。 3. 在这种情况下使用new,但请查找std::make_unique。无关:我还建议查看#include <bits/stdc++.h>的作用。你在这里使用它的方式让我担心你会迷恋货物崇拜编程。
标签: c++ class pointers vector 2d