2017-06-22 108 views
0

所以我有一个模板类此功能:的std :: out_of_range异常怪异输出

T getValue(int x, int y) const throw(logic_error, out_of_range) { // value getter 
    try { 
     if (x > rows || y > cols || x <= 0 || y <= 0) 
      throw out_of_range("Invalid x or y."); 
     else 
      return data[cols*(x-1)+(y-1)]; 
    } catch (out_of_range& e) { 
     cerr << e.what() << endl; 
    } 
} 

例外作品,如果我尝试给它一个超出范围的数字,但输出始终是:

Invalid x or y. 
1 

我一直在尝试一个小时,弄清楚那个1从哪里来,我错过了什么世界?它当然与std :: out_of_range有关,但我无法找出究竟是什么。

编辑这是关于一个模板矩阵:

Matrix<int> a(2, 2, 0); // creates a 2x2 matrix of all zeros 
cout << a.getValue(3, 2) << endl; // prints the value at row 3, col 2, which doesn't actually exists; the output is as shown above 

此外,值得注意的是,

int b = a.getValue(3, 2); 

给出预期输出:

​​
+0

添加'返回3;'只是'getValue'右花括号之前并再次运行代码。这应该清楚发生了什么事情。 –

+0

做过了;现在输出的数字是3,所以我得到的是一个流氓回报值。为什么我得到那个?如果函数不能继续,那么是否有例外可以帮助我避免返回任何值? – Zelethil

+0

@Zelethil - 代码捕获异常。正常执行继续在catch子句之后。而且,是的,1是一种流氓回报价值。运行应该返回值的函数的末尾会产生未定义的行为。在实践中,您最终会看到预期返回值的寄存器中发生的任何值。 –

回答

0

加入

解决它
exit(-1); 

到catch块:

catch (out_of_range &e) { 
    cerr << e.what() << endl; 
    exit(-1); 
}