2012-03-01 5 views
3

C++ 추상 클래스 (다른 클래스는 상속 및 인스턴스화해야 함)에서 이상한 오류 (';', 문자열 클래스가 인식되지 않음 등)가 발생합니다. 또한 파생 클래스가 추상 클래스 메서드를 구현하도록 강요하고 싶습니다. 따라서 순수 가상 = 0입니다.추상 클래스/함수에서 컴파일 오류가 발생했습니다.

다음은 추상 추상 클래스 정의입니다.

Drawable.h :

#ifndef __myns__managers__Drawable_h__ 
#define __myns__managers__Drawable_h__ 

#include <string> 

namespace myns 
{ 
    namespace managers 
    { 
     class Drawable; 
    } 
} 

namespace myns 
{ 
    namespace managers 
    { 
     class Drawable 
     { 
      public: 
       virtual float getX() = 0; 
       virtual float getY() = 0; 
       virtual string getImageFilePath() = 0; 
      protected: 
       int drawableId; 

     }; 
    } 
} 

#endif 

C의 내 관련 지식 ++ 그게 바로, 모든 확인 같아요? 하지만 VS 2010에서 컴파일하면 다음과 같은 컴파일 오류가 발생합니다.

어떻게 해결할 수 있습니까? 미리 감사드립니다.

VS는 출력을 빌드 :

1>------ Build started: Project: InteractiveMembranes_vc10, Configuration: X86 Debug Win32 ------ 
1> OutputManager.cpp 
1>(project dir)\managers\drawable.h(23): error C2146: syntax error : missing ';' before identifier 'getImageFilePath' 
1>(project dir)\managers\drawable.h(23): error C2433: 'interactivemembranes::managers::Drawable::string' : 'virtual' not permitted on data declarations 
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>(project dir)\managers\drawable.h(23): warning C4183: 'getImageFilePath': missing return type; assumed to be a member function returning 'int' 
1>(project dir)\managers\drawable.h(23): error C2253: 'interactivemembranes::managers::Drawable::getImageFilePath' : pure specifier or abstract override specifier only allowed on virtual function 
1> Application.cpp 
1>(project dir)\managers\drawable.h(23): error C2146: syntax error : missing ';' before identifier 'getImageFilePath' 
1>(project dir)\managers\drawable.h(23): error C2433: 'interactivemembranes::managers::Drawable::string' : 'virtual' not permitted on data declarations 
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>(project dir)\managers\drawable.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>(project dir)\managers\drawable.h(23): warning C4183: 'getImageFilePath': missing return type; assumed to be a member function returning 'int' 
1>(project dir)\managers\drawable.h(23): error C2253: 'interactivemembranes::managers::Drawable::getImageFilePath' : pure specifier or abstract override specifier only allowed on virtual function 
1> Generating Code... 
1> Compiling... 
1> TestPersistence.cpp 
1> Generating Code... 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

답변

6

당신은 string 자격을해야합니다

virtual std::string getImageFilePath() = 0; 

string하지 글로벌 한에서 std 네임 스페이스에 있습니다. 또한 using namespace std; 옵션을 사용하면 네임 스페이스를 전역으로 가져올 수 있지만 은 특히 헤더에서 사용하지 마십시오. 방금 옵션으로 제시하고 있지만 이름을 정규화하는 것이 좋습니다.

편집 : Als가 지적한 것처럼 필요한 것만 가져올 수 있습니다 : using std::string;. 나는 아직도 이름을 자격을 얻는 것을 선호 할 것입니다.

+0

* 이런 경우 std :: string;을 사용하면 선언 *을 사용하는 것이 더 편리합니다. –

+0

OMG, 실화. 이런! 고맙습니다. 초보자 인 초보자 C++ 프로그래머. – pedrosanta

관련 문제