2016-10-08 12 views
-1

.h 파일이 포함 된 .cpp 파일을 컴파일하려고 시도하고 개요 클래스를 구현합니다. String.h에서개인 변수를 정의하려고 할 때 .cpp 파일을 컴파일 할 수 없음

: String.cpp에서

using namespace std; 

class String 
{ 
     private: 

       int _length; 
       char *data; 
       int getCharArraySize(char arr[]); 

:

% g++ String.cpp -c 
String.cpp:14:17: error: ‘int String::_length’ is not a static data member of ‘class String’ 
int String::_length; 

난 단지입니다 :

#include "String.h" 

using namespace std; 

     /* 
     * Private vars and methods 
     */ 
     int String::_length; 
     char String::*data; 
     int String::getCharArraySize(char arr[]) 
     { 
      //method body 
      return 0; 
     } 

내가 g 컴파일을 시도 ++ 나는이 오류 String :: _ length 문제가 있습니다. 처음에는 _length가 private이지만 다른 모든 private 메소드/vars로 인해서 컴파일이 잘되었다고 생각했습니다. 이 .h 파일을있는 그대로두고 나가 공개 할 수는 없습니다. 어떤 도움을 주시면 감사하겠습니다!

+0

정적 멤버 변수가 아닌 경우에는'int String :: _ length;'가 필요하지 않습니다. –

+0

코드를 게시 할 때 줄 번호를 포함하지 마십시오 (코드를 복사하여 자신을 시험해 볼 수 없습니다). 대신 예 : 오류가 발생한 행을 표시하는 주석. –

+0

그러면 생성자 내에서 간단히 정의해야합니까? 또한 정식으로 언급했다. 나는 그 질문을 편집 할 것이다. –

답변

1

글쎄, 컴파일러의 말처럼 정확히 : _length은 정적 멤버 변수가 아닙니다. 그러나 당신은 자신의 정의를 제공함으로써 그것을 하나의 것으로 취급합니다. 단순히 그렇게하지 마십시오. 만 정적과 같이 정의해야합니다.

data도 마찬가지입니다.

char String::*data; 

이 맞다 : 혹시 char* 변수를 정의 할 경우 그런데

, 다음이 잘못된 것입니다 (

char* String::data; 

어휘 문법 생산 기이로부터 상속 C)에도 불구하고 *은 이름이 아닌 유형의 일부입니다.