2010-05-13 6 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 

using std::run_time_error 
class MyClass : public run_time_error 

대 이것은 당신이 상단에 #include를 한 가정한다. 나는 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 '?'를 사용할 수 있습니까? 물론 그렇습니다. 그러나 그것은 합법적 인 질문이며 구두점의 오류로 인해 downvoted되어서는 안됩니다. – andand

+0

@Suma는 "첫 번째 줄에서 std를 선언하는 것은 불법입니다."라고 물어볼 때 질문이 없더라도 충분히 명확한 질문처럼 보입니다. –

+0

첫 번째 버전에서 오류가 발생하는 경우 (이 방법이 더 좋음, Neil의 답변 참조)이 오류는 표시된 코드에 나와 있지 않습니다. 이 문제를 해결할 수 없다면 편집자에게 붙여 넣을 수있는 10 줄짜리 줄을 넣고 (필요한 오류 포함 및 모두, 편집자에게 표시되는 오류를 제외하고는 모두 편집 가능해야 함) 제안하고 새로운 질문을 시도해보십시오. 도움. – sbi

답변

4

두 가지 모두 합법적입니다. 그러나 헤더 파일에 있다고 가정하면 전역 이름 공간에 이름을 배치하므로 헤더 사용 자에게 문제가 발생할 수 있으므로 using 지시문 버전을 사용하면 안됩니다.

편집

:

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

는 당신이 필요로하는 무엇을 :은 그냥 클래스 이름의 잘못을 가지고 것으로 나타났습니다.

+0

예, 죄송합니다, 멍청한 실수. – Crystal