要在xth位置访问数组indice,我们可以使用某种插图,如下所示
#include<iostream>
using namespace std;
int main(){
float i[20];
for(int j=0;j<=20;j++)
i[j]=0;
}
但是下面的代码不起作用
#include<iostream>
using namespace std;
float oldrand[55];
int jrand;
void advance_random(){
int j1;
float new_random;
for(j1=0;j1<=23;j1++){
int temp = j1+30;
new_random = (oldrand[j1]) - (oldrand[temp]);
if(new_random <0.0)
new_random = new_random+1;
oldrand[j1] = new_random;
}
for(j1=24;j1<=54;j1++){
new_random[j1] = oldrand[j1] - oldrand[j1-23];
if(new_random[j1]<0.0)
new_random[j1] = new_random + 1;
oldrand[j1]=new_random;
}
}
我收到以下错误
ga.cpp:20: error: invalid types ‘float[int]’ for array subscript
ga.cpp:21: error: invalid types ‘float[int]’ for array subscript
ga.cpp:22: error: invalid types ‘float[int]’ for array subscript
我无法在代码中找到错误请帮帮我
答案 0 :(得分:7)
new_random
未声明为浮点数组,它被声明为浮点数。编译器试图告诉你不能索引到浮点数。
答案 1 :(得分:5)
正如其他人所说,new_random
未声明为数组,因此编译错误。
此外,使用这种类型的循环
float i[20];
for(int j=0;j<=20;j++)
i[j]=0;
你将耗尽数组边界并获得未定义的行为。正确的形式是
for(int j=0;j<20;j++)
这是因为在C / C ++中,数组从0开始索引,因此包含20个元素的数组包含从0到19索引的元素。
答案 2 :(得分:0)
oldRand是一个数组new_random只是一个浮点数,所以
new_random[j1]
无效。
答案 3 :(得分:0)
您将new_random声明为float,而不是float数组,并且正在尝试使用访问它的数组方法(new_random [j1])。
答案 4 :(得分:0)
第一段代码的这一部分是错误的:
int main(){
float i[20];
for(int j=0;j<=20;j++)
i[j]=0;
}
该循环的最后一次迭代将分配给不存在的i[20]
(因为float i[20]
定义了从i[0]
到i[19]
的浮点数组。正确的方法是:
int main(){
float i[20];
for(int j=0;j<20;j++)
i[j]=0;
}
请注意j<20
而非j<=20
答案 5 :(得分:0)
因为当您将变量new_random
声明为普通浮点数时,将其视为数组。
答案 6 :(得分:0)
new_random不是数组。您正试图将其视为以下行中的一个:
new_random[j1] = oldrand[j1] - oldrand[j1-23];
if(new_random[j1]<0.0)
new_random[j1] = new_random + 1;
答案 7 :(得分:0)
这些是导致问题的原因:
for(j1=24;j1<=54;j1++){
new_random[j1] = oldrand[j1] - oldrand[j1-23];
if(new_random[j1]<0.0)
new_random[j1] = new_random + 1;
oldrand[j1]=new_random;
}
如前所述,“new_random [j1] ”是非法的 - 只要删除“[j1]”就应该正常工作:
for(j1=24;j1<=54;j1++){
new_random = oldrand[j1] - oldrand[j1-23];
if(new_random<0.0)
new_random = new_random + 1;
oldrand[j1]=new_random;
}