Destroyer 在构造函数之后立即被调用

恐龙细胞

我看到了一些有同样问题的帖子,但我没能理解如何使临时对象保持不变

地图.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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的类析构函数立即被调用?

来自分类Dev

为什么我的类析构函数立即被调用?

来自分类Dev

CATransaction完成立即被调用

来自分类Dev

signal()处理函数立即被解雇

来自分类Dev

防止接收器接收值关闭立即被调用

来自分类Dev

在构造函数之后直接调用函数:new Object()-> callFunction()

来自分类Dev

为什么在调用简单构造函数之后调用拷贝构造函数?

来自分类Dev

为什么在调用简单构造函数之后调用拷贝构造函数?

来自分类Dev

ValueError:未正确调用DataFrame构造函数-安装SparsePCA之后

来自分类Dev

重写立即调用的函数

来自分类Dev

从noexcept函数参数的构造函数引发的异常是否会立即导致对std :: terminate()的调用?

来自分类Dev

可以登录但立即被丢弃

来自分类Dev

RACObserve subscriptionNext立即被致电

来自分类Dev

在useEffect()中使用useDispatch()时,动作似乎不会立即被调用

来自分类Dev

当我返回片段时,观察者会立即被调用

来自分类Dev

Java - 为什么实例块在构造函数之后调用或在构造函数中按顺序调用?

来自分类Dev

C ++为什么在堆栈中构造完对象后立即调用析构函数?

来自分类Dev

C ++为什么在堆栈中构造完对象后立即调用析构函数?

来自分类Dev

ARM + gcc:在main()返回之后不调用全局析构函数,但是构造函数是

来自分类Dev

在registerUserNotificationSettings之后立即调用registerForRemoteNotifications吗?

来自分类Dev

在调用startService之后立即到达实例

来自分类Dev

setInterval之后调用函数

来自分类Dev

在派生构造函数中的某些代码块之后,在派生类中调用基类构造函数

来自分类Dev

立即调用命名函数

来自分类Dev

不会立即调用onKeyPress函数

来自分类Dev

备用构造函数调用

来自分类Dev

构造函数调用顺序

来自分类Dev

委托构造函数的调用

来自分类Dev

结构构造函数调用this()

Related 相关文章

  1. 1

    为什么我的类析构函数立即被调用?

  2. 2

    为什么我的类析构函数立即被调用?

  3. 3

    CATransaction完成立即被调用

  4. 4

    signal()处理函数立即被解雇

  5. 5

    防止接收器接收值关闭立即被调用

  6. 6

    在构造函数之后直接调用函数:new Object()-> callFunction()

  7. 7

    为什么在调用简单构造函数之后调用拷贝构造函数?

  8. 8

    为什么在调用简单构造函数之后调用拷贝构造函数?

  9. 9

    ValueError:未正确调用DataFrame构造函数-安装SparsePCA之后

  10. 10

    重写立即调用的函数

  11. 11

    从noexcept函数参数的构造函数引发的异常是否会立即导致对std :: terminate()的调用?

  12. 12

    可以登录但立即被丢弃

  13. 13

    RACObserve subscriptionNext立即被致电

  14. 14

    在useEffect()中使用useDispatch()时,动作似乎不会立即被调用

  15. 15

    当我返回片段时,观察者会立即被调用

  16. 16

    Java - 为什么实例块在构造函数之后调用或在构造函数中按顺序调用?

  17. 17

    C ++为什么在堆栈中构造完对象后立即调用析构函数?

  18. 18

    C ++为什么在堆栈中构造完对象后立即调用析构函数?

  19. 19

    ARM + gcc:在main()返回之后不调用全局析构函数,但是构造函数是

  20. 20

    在registerUserNotificationSettings之后立即调用registerForRemoteNotifications吗?

  21. 21

    在调用startService之后立即到达实例

  22. 22

    setInterval之后调用函数

  23. 23

    在派生构造函数中的某些代码块之后,在派生类中调用基类构造函数

  24. 24

    立即调用命名函数

  25. 25

    不会立即调用onKeyPress函数

  26. 26

    备用构造函数调用

  27. 27

    构造函数调用顺序

  28. 28

    委托构造函数的调用

  29. 29

    结构构造函数调用this()

热门标签

归档