Matrix范围变量未在此范围内声明

时间:2016-04-03 09:35:04

标签: c++ matrix sum

我知道这类问题已经提出,但没有一个解决方案帮助我。 我想在键盘上敲击键时得到矩阵元素的总和,但是程序给了我下一个错误:

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;
}

有什么问题?变量是在程序开始时声明的。提前谢谢!

2 个答案:

答案 0 :(得分:-1)

两个问题:第一个是关于你的错误,那就是变量是按你在源中实际执行的顺序声明/定义的。

例如:

int i, j;

在上面的行中,变量i在变量j之前被声明为

第二个问题是您在初始化之前尝试使用变量ij。这意味着他们将拥有不确定值,并在您使用时为您提供未定义的行为

第三点是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)在运行时可能不会导致任何问题,但可能导致不正确通过其他代码行进行数据检索和操作。