尝试,抛出,捕获二维数组无法正常工作

时间:2012-08-13 22:43:56

标签: c++ visual-c++

我仍然是二维数组的新手,但我正在尝试使用一些异常处理:

const int employee = 3;   // number of employees
const int age = 4;      // number of ages
int employeesAge[employee][age] = { {50 , 0 , 45, 101}, {45, 6 ,7, 8} , {25 , 8,0, 35}}

for(int i =0; i < employeesAge[employee][age]; i++)
   if(employeesAge[employee][age] < 0 || employeesAge[employee][age] > 100)
   {
      try
       {
         throw employeesAge[employee][age];
       }
       catch(int param)
       {
          cout << "employee can't be under 0 age or over 100 to work here" << endl;
       }
    }

现在我甚至不确定我所做的事情是否可能,但这是我得到的错误:

uninitialized local variable 'employeesAge' used

如果有人能提供帮助,那将非常感激。现在我想起来,我不认为我的陈述是有效的或必要的。

2 个答案:

答案 0 :(得分:1)

看看你的缩进和大括号(这不是错误,但我想指出它'因为它可能会让你陷入困境并导致你长时间痛苦的调试派对):

for(int i =0; i < employeesAge[employee][age]; i++)
    if(employeesAge[employee][age] < 0 || employeesAge[employee][age] > 100) {
        try {
            throw employeesAge[employee][age];
        }
        catch(string param) {
            cout << "employee can't be under 0 age or over 100 to work here" << endl;
        }
    }

for循环没有打开或关闭括号,如果你不小心谨慎肯定会导致问题)

但更重要的是你错了。您有for(int i =0; i < employeesAge[employee][age]; i++),但从未使用i。这是错误的,因为1)employeesAge[employee][age]超出范围(只有索引[0][0][employee - 1][age - 1]才有效); 2)因为你从不使用i并继续使用employeesAge[employee][age],这表明你只是继续检查相同的值。您的编译器可能足够聪明,可以知道employeesAge[employee][age]已超出范围,可能会警告您。

答案 1 :(得分:1)

在第for(int i =0; i < employeesAge[employee][age]; i++)行中,您将整数iemployeesAge[3][4]进行比较,但这些索引超出范围 - 在这种情况下,最大值为employeesAge[2][3]。另外,你的for循环对我来说真的没有多大意义 - 你想要'foreach employee'吗?我怀疑 - 如果是这样的话,更接近的解决方案是:

for(int i = 0; i < employee; i++)
{
    if(employeesAge[i][age] < 0 || employeesAge[i][age] > 100) {
    ...
}

但即使这样也不太正确,现在age索引超出了该数组的范围。我不确定这里的逻辑是什么 - 为什么单个员工会有多个与他们相关的年龄?现在,您的阵列看起来像有3名员工,每个员工有4个年龄段。我会猜测,并说你有3组员工,每组4名成员。如果是这种情况,代码:

for(int i = 0; i < employee; i++)
{
    for(int j = 0; j < age; j++)
    {
        if(employeesAge[i][j] < 0 || employeesAge[i][j] > 100) {
            throw employeesAge[i][j];
        }
    }

}

...可能更有意义,但我肯定会改变索引/数组名称以使其更具描述性。