2014-01-20 68 views
0

以下使用std::range_error有什麼不對? 當我編譯這個代碼,我得到一個這個C++異常語法(std :: runtime_error)有什麼問題?

"syntax error :';'" 

(順便說一句我的理解是一個函數的異常規範現在被忽略,但是是導致語法錯誤?)

#include <stdexcept> 

void function() throw(std::runtime_error) { 
    if(true) 
    throw (std::range_error); 
} 

回答

4

range_error是一種類型。扔一個,你需要創建一個對象:

throw std::range_error("Your message goes here"); 

,你在函數的異常說明做可以使用的類型名稱;但不應該因爲它們已被棄用。

0

有兩種使用throw

  1. 作爲聲明。語法是throw(<exception specification>)

  2. 作爲聲明。語法是throw exception_object;

您的代碼嘗試使用兩者,但第二種語法錯誤。

在一個不相關的事情,異常規範聲明已經失寵,因爲它們提供相對較少的好處,是迷惑許多用戶(因爲他們做提供編譯時檢查),並在C +一個更好的替代+11。

1

至少有2個問題...

  • 您需要#include <stdexcept>
  • std::range_error構造函數需要一個字符串參數
+0

重。 ''是的。我的錯字。現在糾正! – patchwork