Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将不同对象的引用传递到构造函数中有一个对象的类中_C++_Object_Constructor - Fatal编程技术网

C++ 将不同对象的引用传递到构造函数中有一个对象的类中

C++ 将不同对象的引用传递到构造函数中有一个对象的类中,c++,object,constructor,C++,Object,Constructor,我在大学里尝试编写一个游戏时遇到了一些问题。我有一个碰撞管理器类,它拥有与玩家和敌人的各种碰撞的函数。在这个类中,我有玩家和每个敌人的指针对象,所以我可以访问所涉及对象的各种碰撞响应成员函数。当我测试与玩家和每个敌人的碰撞时,这一切都很好,但是现在我正试图建立一个多敌人的等级,我在从碰撞检测器访问多个敌人时遇到了问题 我已经尝试过修剪脂肪,并且没有留下太多不重要的代码,但是我尝试做的一个例子是: 在标题中: class CollisionManager { public: Colli

我在大学里尝试编写一个游戏时遇到了一些问题。我有一个碰撞管理器类,它拥有与玩家和敌人的各种碰撞的函数。在这个类中,我有玩家和每个敌人的指针对象,所以我可以访问所涉及对象的各种碰撞响应成员函数。当我测试与玩家和每个敌人的碰撞时,这一切都很好,但是现在我正试图建立一个多敌人的等级,我在从碰撞检测器访问多个敌人时遇到了问题

我已经尝试过修剪脂肪,并且没有留下太多不重要的代码,但是我尝试做的一个例子是:

在标题中:


class CollisionManager
{
public:

    CollisionManager(Player& play, Enemy* en);
    ~CollisionManager();

    void update();

private:
    Player* player;
    Enemy* enemy;
};

在cpp文件中


CollisionManager::CollisionManager(Player& play, Enemy* en) :
    player(&play),
    enemy(en)
{

}
void CollisionManager::update()
{
    // What happens when the enemy and the player collide under various circumstances
}
就像我说的,如果只有一个玩家和一个敌人,这很好,但是如果我想要多个敌人,我如何让他们都访问这些碰撞检测

我试着创建一个敌人的数组或向量,以及一个敌人的指针(在关卡类中),循环遍历各种敌人

我尝试更改CollisionManager类中的构造函数参数,将向量作为参数,然后从level类将敌人向量传递给它

这是我当前在级别文件中的内容: 在标题中

class Level : BaseLevel {
private:
    CollisionManager collisions;
    Player player;
    Enemy* enemy;
    //std::vector<Enemy> enemies;
    //Enemy enemies[6];

}
类级别:基本级别{
私人:
碰撞管理器碰撞;
玩家;
敌人*敌人;
//病媒天敌;
//敌方(6),;
}
这两个敌人(数组和向量)将展示我尝试过的两个示例

在cpp文件中:

Level::Level() :
    collisions(player, enemy)
{
    enemy = NULL; // I'm not sure if this is necessary? To stop it being initialized as a null pointer
    // Use this if enemies is a vector and not an array
    for (int i = 0; i < 6; i++)
    {
        enemies.push_back(Enemy());
    }
}
void Level::update(float dt)
{
    for (int i = 0; i < enemies.size(); i++)
    {
        enemy = &enemies[i];
        collisions.update();
    }
}
Level::Level():
碰撞(玩家、敌人)
{
敌方=NULL;//我不确定是否有必要这样做?停止将其初始化为NULL指针
//如果敌人是向量而不是数组,请使用此选项
对于(int i=0;i<6;i++)
{
敌人。推回(敌人());
}
}
无效级别::更新(浮动dt)
{
for(int i=0;i
我调试了这个,它告诉我敌人是一个空PTR。我目前正在研究如何解决这个问题,但似乎找不到解决办法

我觉得我必须在这里遗漏一些基本的东西,但我一辈子都看不到如何解决这个问题,而不从CollisionManager类中获取所有功能并将其转储到级别中,以便所有人都可以访问它,但我不希望这样做


非常感谢您的帮助,我很高兴提供进一步的信息/代码。

我设法修复了它。我完全错误地处理了这个问题--我没有在CollisionManager中使用指向对象的指针来访问其成员函数,而是将玩家和敌人的引用作为保存碰撞响应的函数的参数,然后在调用这些函数时,使用级别中的玩家和敌人对象作为参数。抱歉,如果这看起来很明显(现在对我来说是这样!),我对这一切还是很陌生的

请做一份报告。不要在问题中手动输入代码(这可能会产生类似
Class
的工件,带有大写字母
C
等)。离线创建MRE并将其复制/粘贴到问题中。感谢您的回复!我相信我已经做到了。更好,但是在
碰撞管理器的构造函数的初始值设定项列表中,您有
敌人(en)
-但是
碰撞管理器中没有
敌人
成员变量(成员
en
可能应该重命名为
敌人
)。噢!但这并不是让我绊倒的原因——我有几种不同的敌人类型,所以我想为了这篇文章,我会把它们浓缩成敌人,而不是恶魔、骑士、僵尸等等,这似乎是不必要的细节。这个意图很好——但请举一个实际编译的最小示例(如果编译不是问题的话)在这个问题上。如果需要,将需要的部分粘贴到在线编译器(如)中。我们不需要将代码视为单个文件(如果这不是问题的一部分)。一个最小的代码块就可以了。