【问题标题】:Is this the right way of passing an array of a class to a method in another class这是将一个类的数组传递给另一个类中的方法的正确方法吗
【发布时间】:2013-12-11 15:41:16
【问题描述】:

我需要将一个游戏实体数组传递给碰撞类中的一个方法

Class Game{
   public: GameEntity *positions[48];
           void DoAction();
           Collision *col;
  }

在 Game.cpp 中

  void GameEntity::DoAction(){

      col = new Collision(positions[0]);
   }

在其构造函数中接受游戏性数组的类

 class Collision{

    public:
      Collision(GameEntity * positions)

   }

在 Collision.cpp 中

  Collision::Collision(GameEntity  *springBalls)
   {

          for(int i = 0 ; i< 49; i++)

         {
           cout<<springBalls[0]<<endl

         }
  }

【问题讨论】:

  • 一个类的数组?这是一些我不知道的带有巧妙反射技巧的新 C++ 功能吗?
  • 问题到底是什么?
  • 我怀疑你的意思是springBalls[i],而你想要Collision::Collision(GameEntity **springBalls)

标签: c++ arrays pass-by-reference


【解决方案1】:

此声明,

GameEntity *positions[48];

是一个由 48 个指向 GameEntity 的指针组成的数组。

我记得是通过标准的main 签名。

接受的形式参数可以是

GameEntity** a

或者它可以是例如

GameEntity* (&a)[48]

后者通过引用接收数组,但因此需要硬连线数组大小。


作为一般性评论,在实际应用中更喜欢标准库抽象,例如 std::arraystd::vector

【讨论】:

    【解决方案2】:

    使用std::vector

    问题一:

    col = new Collision(positions[0]);
    

    传入指针,而不是解除对第一个元素的引用

    col = new Collision(positions);
    

    问题 2:

    您分配了 48 个 GameEntity:s(索引 0-47)。但是你尝试访问 [48]

    for(int i = 0 ; i< 49; i++)
    

    问题 3:

    GameEntity *positions[48];
    

    是一个指针数组。因此 Collision::Collision 应该采用 GameEntity** 类型的参数

    【讨论】:

      【解决方案3】:

      你会为 Collision 对象做这样的事情:

      Collision::Collision(GameEntity** springBalls) { }

      但是你的 springBalls 必须是一个包含 48 个 GameEntity 对象的数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多