2010-05-26 7 views
2

정적 멤버가있는이 클래스가 있습니다. 또한 내 프로그램의 다른 여러 클래스에 대한 기본 클래스이기도합니다. 헤더 파일은 다음과 같습니다.정적 멤버 변수에 대한 정의되지 않은 참조

#ifndef YARL_OBJECT_HPP 
#define YARL_OBJECT_HPP 

namespace yarlObject 
{ 
    class YarlObject 
    { 
    // Member Variables 
     private: 
      static int nextID; // keeps track of the next ID number to be used 
      int ID; // the identifier for a specific object 

    // Member Functions 
     public: 
      YarlObject(): ID(++nextID) {} 
      virtual ~YarlObject() {} 

      int getID() const {return ID;} 

    }; 
} 

#endif 

여기 구현 파일이 있습니다.

#include "YarlObject.hpp" 

namespace yarlObject 
{ 
    int YarlObject::nextID = 0; 
} 

저는 g ++를 사용하고 있으며 세 개의 undefined reference to 'yarlObject::YarlObject::nextID 링커 오류를 반환합니다. 생성자의 ++nextID 구를 단지 nextID으로 변경하면 하나의 오류 만 발생하고이를 1으로 변경하면 올바르게 연결됩니다. 나는 그것이 단순한 무엇인가 상상한다. 그러나 무엇이 계속하고 있냐?

+0

99.9 % 확실합니다.'++ nextID'를'1'로 바꿀 때 올바르게 링크됩니다. – Max

+1

'nextID'를 참조하지 않으면 정의 할 필요가 없습니다. 따라서 최종 실행 파일에 해당 정의가 있음을 나타내는 것은 아닙니다. 사실, 그것이 작동한다는 사실은 구현 파일과 링크하지 못한다는 것을 나타냅니다. –

답변

1

생성 된 .o 파일과 연결되어 있는지 확인하십시오. makefile을 다시 확인하십시오.

+0

이렇게 수정했습니다. 감사. – Max

+1

왜 다른 점이 있습니까? YarlObject.o 파일에 링크하지 않으면 @Max와 동일한 오류가 발생하고 인라인 생성자를 사용하여 연결하면 모두 사라졌습니다. – Troubadour

+0

-1 : @Max에 대한 문제가 수정되었을 수도 있지만 가장 확실한 이유는 아닙니다. – Troubadour