정적 멤버가있는이 클래스가 있습니다. 또한 내 프로그램의 다른 여러 클래스에 대한 기본 클래스이기도합니다. 헤더 파일은 다음과 같습니다.정적 멤버 변수에 대한 정의되지 않은 참조
#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
으로 변경하면 올바르게 연결됩니다. 나는 그것이 단순한 무엇인가 상상한다. 그러나 무엇이 계속하고 있냐?
99.9 % 확실합니다.'++ nextID'를'1'로 바꿀 때 올바르게 링크됩니다. – Max
'nextID'를 참조하지 않으면 정의 할 필요가 없습니다. 따라서 최종 실행 파일에 해당 정의가 있음을 나타내는 것은 아닙니다. 사실, 그것이 작동한다는 사실은 구현 파일과 링크하지 못한다는 것을 나타냅니다. –