developer tip

정적 멤버에 대한 정의되지 않은 참조

copycodes 2020. 11. 4. 08:06
반응형

정적 멤버에 대한 정의되지 않은 참조


크로스 컴파일러를 사용하고 있습니다. 내 코드는 다음과 같습니다.

class WindowsTimer{
public:
  WindowsTimer(){
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};

다음과 같은 오류가 발생합니다.

`WindowsTimer :: _ frequency '에 대한 정의되지 않은 참조

나는 또한 그것을 바꾸려고 노력했다

LARGE_INTEGER _frequency.QuadPart = 0ull;

또는

static LARGE_INTEGER _frequency.QuadPart = 0ull;

하지만 여전히 오류가 발생합니다.

이유를 아는 사람 있나요?


_frequency.cpp 파일에서 정의해야 합니다.

LARGE_INTEGER WindowsTimer::_frequency;

링커는 데이터를 어디에 할당할지 모르기 _frequency때문에 수동으로 알려야합니다. 다음 행을 LARGE_INTEGER WindowsTimer::_frequency = 0;C ++ 소스 중 하나에 추가하면 됩니다.

여기에 더 자세한 설명


클래스 내에 선언 된 정적 변수가있는 경우 다음과 같이 cpp 파일에 정의해야합니다.

LARGE_INTEGER WindowsTimer::_frequency = 0;

C ++ 17을 사용하면 변수를 inline으로 선언 할 수 있으며 더 이상 cpp 파일에서 정의 할 필요가 없습니다.

inline static LARGE_INTEGER _frequency;

참고 URL : https://stackoverflow.com/questions/9110487/undefined-reference-to-a-static-member

반응형