2011-04-03 28 views
6

相同的代碼工作正常在GCC 4.5.2,但我得到的錯誤‘runtime_error’ was not declared in this scoperuntime_error並沒有在此範圍內聲明的G ++試圖編譯它的gcc 4.1.2當4.1.2

我有

#include <stdexcept> 

這是用gcc 4.1.2的問題嗎?

代碼摘錄

// Constructor 
if (resource cannot be acquired) 
    throw std::runtime_error("Blah Blah"); 
+2

您是否指定了搜索頭文件的路徑。編譯器可能正在拾取一個非標準的頭文件? – 2011-04-03 02:21:03

+0

我所有額外的包含路徑都在我的源文件夾中,並且沒有名爲stdexcept的文件。如果你的假設是正確的,它是如何解釋我的代碼在4.5.2而不是4.1.2中工作的? – 2011-04-03 04:00:39

+1

你可以嘗試的一件事就是溫和地編輯你的STL實現中的stdexcept,看看它是否包含在#warning「stdexcept包含的行中」。在其開始。 – ds27680 2011-04-03 10:20:54

回答

5

Visual Studio說runtime_error應該在<stdexcept>中定義,所以我猜測GCC 4.1.2在這裏只是過時了。

+0

這是一個自動搜索頭文件的問題。我有幾臺不同的linux風格的機器。在某些機器上,我需要在其他人上包含,我不需要。爲了安全起見,只需包含標題。 – 2016-05-01 17:32:19

2

你有using namespace std;using std::runtime_error;?如果不是,那麼您需要完全限定名稱並使用std::runtime_error而不僅僅是runtime_error

+0

是的,我的代碼以完全合格的方式調用std :: runtime_error。 – 2011-04-03 02:05:26

1

GCC 4.1是比較老。 4.5更符合標準。也許你觸發了一個編譯器的bug

相關問題