【问题标题】:C++ Error error: invalid types 'double [10][10][double]' for array subscript [closed]C ++错误错误:数组下标的无效类型'double [10] [10] [double]' [关闭]
【发布时间】:2016-11-24 02:06:23
【问题描述】:

我试图通过以 0.1 为增量从 0 循环到 1 来生成网格。当我使用整数递增时,代码运行良好,例如从 0 到 10 以 1 为增量,但我无法理解这有什么问题。

#include <iostream>
using namespace std;

int main()
{

double u[10][10];
double dx=0.1, i, j;

for(i=0;i<=1;i+=dx)
for(j=0;j<=1;j+=dx)
{
    u[i][j]=i; // this line gives an error
}
}

【问题讨论】:

  • 你的问题是,究竟是什么? ij 是双打。您不能使用双精度数索引数组。下一个问题,请...显示的代码也有另一个错误。两个循环都使用i
  • 数组索引是整数。您不能使用双精度数代替整数来索引数组。显然,您不能声明double dx=0.1, i, j;。您在标题中包含的错误消息以简单的语言告诉您。学习阅读信息中的词语——它们是有意义的。它们不只是为了占用屏幕上的空间。
  • 修复了,第二个循环是 j。如果我使用整数递增,循环将永远运行。 i+dx=i 表示整数。
  • @Nick 您可以从 0 到 10 乘 1 循环而不是从 0 到 1 乘 0.1 循环

标签: c++ for-loop


【解决方案1】:

您遇到的问题是您尝试使用双精度类型(例如 0.3)访问数组的索引。由于数组索引是整数,因此尝试访问双索引会导致错误。

我认为这就是你想要做的,所以试试这个:

#include <iostream>
using namespace std;

int main()
{
    double u[11][11];

    for (int i = 0; i <= 10; i++)
        for (int j = 0; j <= 10; j++)
            u[i][j] = (double)(i / 10.0);

}

因此,我们不是尝试在 [0.3][0.3] 处访问 u,而是在 [3][3] 处访问 u,并在将 i 输入数组时将 i 更改为 double。

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多