我看到一些帖子有同样的问题,但我没有理解我如何使临时对象保持不变
Map.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
Robots.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
取值 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; game.cpp \ game.h&#34;这样我添加的每个机器人都会检查地图(双数组中有0&#39; s或1&#39; s)如果它有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);
希望你们能帮助我。感谢
答案 0 :(得分:2)
此构造函数有三个局部变量,其名称与其他变量相同:
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);
}
答案 1 :(得分:0)
Robot newRobot(mapnum, x, y);
这将创建一个名为Robot
的{{1}}类型的对象。在它创建的块的末尾,它将被销毁。