【问题标题】:Error: invalid types ‘int [200][float]’ for array subscript错误:数组下标的类型“int [200][float]”无效
【发布时间】:2016-08-23 06:18:16
【问题描述】:

我基本上有一个坐标系,我想通过坐标索引访问数组。 posVector2f(我使用 sfml)。

            int iposy=static_cast<int>(pos.y);
            int iposx=static_cast<int>(pos.x);
            if(col[iposy][iposx]==N)
                col[iposy][iposx]=i;
            else{
             int vx1 = vx[i];
             int vx2 = vx[(col[iposy][iposx])];
             int vy1 = vy[i];
             int vy2 =vy[(col[iposy][iposx])];

我收到以下错误:

error: invalid types ‘int [200][float]’ for array subscript
      int vx2 = vx[(col[iposy][iposx])];

error: invalid types ‘int [200][float]’ for array subscript
      int vy2 =vy[(col[iposy][iposx])];

【问题讨论】:

  • 发布 col、vx、vy 的声明也不错...
  • @Aconcagua int col[HEIGHT+1][WIDTH+1]; for (int i=1;i
  • vx, vy?顺便说一句:您没有初始化 col 的第一行和第一列,将其保留为 0(如果是全局变量或类变量)或未初始化(如果在堆栈上)。这是故意的吗?
  • @Aconcagua 是的。
  • @Aconcagua oh vx 和 vy 是整数数组。col 在我的代码中被声明为浮点数。感谢您的指导,抱歉误导性评论(col 在我的代码中是浮点数)。

标签: c++ arrays floating-point integer sfml


【解决方案1】:

因此,来自 cmets:如果 col 是 float col[H][W];,则您尝试通过浮点数索引 vx/vy。您将不得不再次转换为 int:

int vx2 = vx[static_cast<int>(col[iposy][iposx])];
int vy2 = vy[static_cast<int>(col[iposy][iposx])];

注意:没有隐式索引检查,所以如果您的浮点数超出范围(负数或 > WIDTH/HEIGHT),您很可能会遇到分段错误...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多