我知道这类问题已经提出,但没有一个解决方案帮助我。 我想在键盘上敲击键时得到矩阵元素的总和,但是程序给了我下一个错误:
main.cpp|6|error: 'j' was not declared in this scope|
main.cpp|13|error: 'a' was not declared in this scope|
main.cpp|19|error: 'a' was not declared in this scope|
我的节目是:
#include <iostream>
using namespace std;
int main()
{
int a[i][j],i,j,s=0,n;
char x;
cout<<"n=";
cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Type:"<<x;
if(x=='1')
{
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
s=s+a[i][j];
cout<<s;
cout<<"bla bla bla";
}
return 0;
}
有什么问题?变量是在程序开始时声明的。提前谢谢!
答案 0 :(得分:-1)
两个问题:第一个是关于你的错误,那就是变量是按你在源中实际执行的顺序声明/定义的。
例如:
int i, j;
在上面的行中,变量i
在变量j
之前被声明为。
第二个问题是您在初始化之前尝试使用变量i
和j
。这意味着他们将拥有不确定值,并在您使用时为您提供未定义的行为。
第三点是C ++没有variable-length arrays,这意味着您无法使用运行时变量实际声明数组(尽管有些编译器会将其添加为非可移植扩展)。
要解决上述所有问题,您需要使用std::vector
(这是我推荐的),或者使用new[]
动态分配内存。
也存在潜在的第四个问题,那是因为C ++中的数组索引是从零开始的。因此,如果您有一个N
元素数组,则有效索引从0
转到N - 1
(包括)。您在数组上的循环从1
变为N
,这意味着最后一个索引可能超出范围。
答案 1 :(得分:-1)
与第6行一样,错误在于我认为不允许的部分int a[i][j]
(即使在JavaScript或Java中也不允许),因此变量&#39; i&#39;和&#39; j&#39;如果你的语法必须是这样的,那么只能是在数组声明之前定义它们的值的常量。您可以选择动态数组声明
int **a=new int[i];
然后对于所需矩阵的每一列,您可以
for(int z=;z<j;z++)
a[z]=new int[j];
其中&#39; i&#39;和&#39; j&#39;如果您有内存约束,则必须再次不仅以前声明,而且还要以某种方式定义。
或者先拿走足够的空间然后继续,我个人不喜欢,比如
int a[100001];
后续错误是相对的,如果处理这个问题就会解决。
同样在循环遍历矩阵时遇到问题OutOfBounds
(0到n-1而不是1到n)在运行时可能不会导致任何问题,但可能导致不正确通过其他代码行进行数据检索和操作。