“i”在目前的情况下不可用

时间:2015-09-18 17:20:55

标签: c++ debugging gcc gdb codeblocks

我是第一次尝试调试工具,我遇到了以下问题:

当我使用调试器逐步执行代码时,当我进入函数ComputeInterest()并将注意放在i上时(标记为i并右键单击它),看通知我

  

'i'在当前上下文中不可用

我也很好奇为什么watch还没有将i放入局部变量中。这是我的代码:

#include <iostream>

double computeInterest (double base_val, double rate, int years)
{
     double final_multiplier;
     for ( int i = 0; i < years; i++ )
     {
          final_multiplier *= (1 + rate);
     }
     return base_val * final_multiplier;
}

int main ()
{
     double base_val;
     double rate;
     int years;
     cout << "Enter a base value: ";
     cin >> base_val;
     cout << "Enter an interest rate: ";
     cin >> rate;
     cout << "Enter the number of years to compound: ";
     cin >> years;
     cout << "After " << years << " you will have " << computeInterest( base_val, rate, years ) << " money" << endl;
}

我正在使用Code:Blocks,g ++(GCC)4.8.1和GNU gdb(GDB)7.6.1的最新版本13.12。

1 个答案:

答案 0 :(得分:4)

i已定义并仅存在于该范围内(for循环):

 for ( int i = 0; i < years; i++ )
 {
      final_multiplier *= (1 + rate);
 }

因此,一旦您进入其中一条线路,您就可以检查“我”。一旦你离开这个循环,i将再次无法使用。

修改

确保构建时没有优化(-O0)和调试信息(-g)编译标记。

<强> EDIT2:

它也可能是GDB问题。因为我也使用过GDB v7.5.1,如果我没记错,并且有相同的行为。也许在更高版本的GDB上,您将获得预期的行为。正如下面评论中提到的Baum mit Augen,GDB v7.9的行为符合您的预期。