我看到了一些有同样问题的帖子,但我没能理解如何使临时对象保持不变
地图.H
#ifndef _Map_
#define _Map_
class Map
{
private:
int Board[7][7];
public:
Map();
Map(int mapNum);
~Map();
void print() const;
};
#endif
Map.Cpp 基本上只是创建一个 7*7 的数组,在所有地方都是 0 或 1
机器人.H
#ifndef _Robot_
#define _Robot_
#include "Map.h"
class Robot
{
private:
int _RobotID;
int _mapNum;
int _X;
int _Y;
public:
Robot();
~Robot();
Robot (int mapNum, int Line, int Column);
void setRobotID(int newid);
void print() const;
};
#endif
s Robot.cpp
#include "Robot.h"
#include "Map.h"
#include <iostream>
#include "Game.h"
using namespace std;
Robot::Robot()
{
}
Robot::Robot(int mapNum, int line, int column) {
_mapNum = mapNum;
_X = line;
_Y = column;
_RobotID=0;
}
现在在我的主要作品中创建一个地图,打印它也是如此。机器人也是如此。我想要做的是将机器人和我的“game.cpp\game.h”中的地图连接起来,这样我添加的每个机器人都会检查地图(带有 0 或 1 的双数组),如果它有 1,则不会将其添加到地图。如果它有一个 0 它会。(addRobot 函数应该这样做)
Game.H
#ifndef _Game_
#define _Game_
#include <vector>
#include <iostream>
#include "Map.h"
#include "Robot.h"
class Game
{
private:
static int _RobotsNum;
Map map1;
Map map2;
public:
void AddRobot(int mapnum, int x, int y);
Map getMap(int mapnum);
Game();
~Game();
};
#endif
游戏cpp
#include "Game.h"
#include <algorithm>
#include <vector>
using namespace std;
int Game::_RobotsNum = 0;
vector <Robot> RobotVec;
Game::Game()
: map1(1),
map2(2)
{
}
Game::~Game()
{
}
void Game::AddRobot(int mapnum, int x, int y) {
我的主要
int main() {
Game game;
// Game* pgame = new Game();
game.AddRobot(1, 3, 4);
game.AddRobot(1, 4, 4);
game.AddRobot(1, 5, 4);
希望你们能帮助我。谢谢
此构造函数具有三个与其他变量同名的局部变量:
Game::Game()
{
vector <Robot> RobotVec; // Not your global variable
Map map1(1); // Not your member variable
Map map2(2); // Not your member variable either
}
为了初始化成员,您可以使用初始化列表:
Game::Game()
: map1(1),
map2(2)
{
}
在 中addRobot
,这将创建一个机器人并指向X
它:
Robot* X = new Robot;
这也创建了一个机器人,所以现在你有两个:
Robot newRobot(mapnum, x, y);
并且这个内存泄漏指向X
远离它原来的机器人,而是指向它newRobot
,它会在之后立即被销毁:
X = &newRobot;
请注意,addRobot
在任何时候都不会将任何一个机器人添加到任何东西中——它会创建两个机器人并忽略它们。
您应该使向量成为成员(避免使用全局变量,除非您特别热衷于重复他人的错误):
class Game
{
private:
int robotsNum;
vector<Robot> robotVec;
Map map1;
Map map2;
// ...
};
Game::Game()
: robotsNum(0),
map1(1),
map2(2)
{
}
并将您的新机器人添加到向量中:
void Game::AddRobot(int mapnum, int x, int y) {
// ...
Robot newRobot(mapnum, x, y);
robotsNum++;
newRobot.setRobotID(robotsNum);
robotVec.push_back(newRobot);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句