【问题标题】:Returning a two-dimensional array from a switch case in C++从 C++ 中的 switch case 返回二维数组
【发布时间】:2012-01-30 22:16:49
【问题描述】:

我正在用 cocos2dx 编写一个游戏,我正在尝试重构一个被调用几次的方法。我想从车辆类型的枚举中返回一个二维数组

我怎样才能让类似下面的东西工作??

int Vehicle::getVehicle(VehicleTypes vehicletypes)
{

int vehicle[8][8] = {0};

switch (vehicleType) {
    case Car:
            // --- ARRAY 1 ------

            vehicle = {
                { 0,0,0,0,0,0,0,0 },
                { 0,0,1,2,5,8,0,0 },
                { 0,0,5,3,4,5,0,0 },
                { 0,0,0,6,0,7,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
            };
            break;
    case Bus:
        {
            // --- ARRAY 2 ------

            Vehicle = {
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,1,2,0,0 },
                { 0,0,3,4,5,0,0,0 },
                { 0,0,6,8,7,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
            };
            break;
        }
    default:
        break;
    }

return vehicle;
}

谢谢

【问题讨论】:

  • 如果您在 Bus 案例中使用正确的变量名可能会有所帮助。 Vehicle != vehicle.
  • 是否要求返回的数组是可修改的?
  • 修复上述问题后:似乎与 stackoverflow.com/questions/3716595/… 几乎完全相同。您不能将 int x[][] 作为 int 返回。

标签: c++ multidimensional-array switch-statement cocos2d-x


【解决方案1】:
typedef const int (*matrix_ptr)[8];

演示:http://ideone.com/i1Tc2

【讨论】:

  • 干杯,我可以让它工作。尽管使用继承完全重写可能会更好。
【解决方案2】:

为什么要使用数组?您应该使用其中一个 STL 容器,例如向量。无论哪种方式,C++ 中的 2D int 数组基本上都是指向 int 指针的指针。函数的调用者需要在堆或堆栈上提供一个已分配的二维数组并将其作为输入/输出参数传递,或者让“被调用者”(此函数)在堆上分配一个二维数组并将其传递回呼叫者。如果是后一种情况,那么调用者现在负责释放内存。

【讨论】:

  • 不,“二维整数数组”是一个衰减为指向一维整数数组的指针的数组。 int[n][m] 不会衰减为 int**
  • 嗯,到目前为止,我只是在这个开发中使用了 c/c++(我知道!!),因为我使用的是 cocos2dx。我正在 Visual Studio 中开发让事情正常工作,然后将所有东西移动到 mac 上的 xcode 并推送到 iphone。 STL 容器在 mac 上是否仍然兼容?也许是时候找到欢呼声了
猜你喜欢
  • 2021-12-04
  • 2021-03-29
  • 1970-01-01
  • 2021-12-24
  • 2014-12-22
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
相关资源
最近更新 更多