2010-05-13 94 views
1

當您想從C++中的類繼承時,在下面的第一行中聲明std是否是非法的?繼承自C++中的類聲明

#ifndef HWEXCEPTION_H 
#define HWEXCEPTION_H 

#include <stdexcept> 


class HWException : public std::run_time_error 
{ 
    void testException(int num); 
}; 

#endif 

VS

using std::run_time_error 
class MyClass : public run_time_error 

這是假設你已經在頂部#包括。我有std :: run_time_error的編譯錯誤,但似乎沒有通過這樣做的第二種方式,並想知道爲什麼。

error C2039: 'run_time_error' : is not a member of 'std' 
'run_time_error' : base class undefined 
1>main.cpp 
error C2039: 'run_time_error' : is not a member of 'std' 
error C2504: 'run_time_error' : base class undefined 
+1

+1是否可以使用'?'?當然,但這是一個合理的問題,不應該因爲標點符號錯誤而被低估。 – andand 2010-05-13 19:19:02

+0

@Suma「在下面第一行中聲明std是非法的」似乎是一個足夠清晰的問題,即使它缺少一個問號。 – 2010-05-13 19:19:21

+0

如果第一個版本出現錯誤(最好是參見Neil的答案),那麼這個錯誤不在你顯示的代碼中。如果你不能解決這個問題,我建議你把十行(必要的包括和所有的,除了你所看到的錯誤以外完全編譯),我們可以將其粘貼到我們的編輯器中,並嘗試自己成爲一個新的問題,並要求幫幫我。 – sbi 2010-05-13 19:37:39

回答

4

兩者都是合法的。但假設這是在一個頭文件中,你不應該使用using指令版本,因爲它將名稱放在全局名稱空間中,這可能會導致頭部用戶出現問題。

編輯:只注意到你的類名錯誤:

#include <stdexcept> 
class MyClass : public std::runtime_error { 
}; 

是你所需要的。

+0

是的,對不起,小白錯誤。 – Crystal 2010-05-13 20:15:55