2012-02-02 2 views
32

크로스 컴파일러를 사용하고 있습니다. 내 코드는 다음과 같습니다정적 멤버에 대한 정의되지 않은 참조

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

내가받을 다음과 같은 오류 : 나는 또한

LARGE_INTEGER _frequency.QuadPart = 0ull; 

또는

static LARGE_INTEGER _frequency.QuadPart = 0ull; 

하지만 난으로 변경하려고

undefined reference to `WindowsTimer::_frequency'

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

누구나 아는 이유는 무엇입니까?

+0

[정적 멤버에 대한 정의되지 않은 참조, 링커 오류] 가능한 복제본 (http://stackoverflow.com/questions/9074073/undefined-reference-to-baseobject-linker-error-cw-freeglut) – iammilind

+0

Where (있는 경우)) _ 정의 _'WindowsTimer :: _ frequency'가 있습니까? –

+0

@CharlesBailey 클래스의 유일한 회원입니다. – kakush

답변

54

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

LARGE_INTEGER WindowsTimer::_frequency; 
15

링커 어디 _frequency에 대한 데이터를 할당하는 방법을 알고하지 않고 수동으로 이야기해야합니다. 다음 행을 간단하게 추가하여이 작업을 수행 할 수 있습니다. LARGE_INTEGER WindowsTimer::_frequency = 0;을 C++ 소스 중 하나에 추가하십시오.

더 자세한 설명 here

13

클래스 내에서 선언 된 정적 변수는 다음 .cpp 파일이 extern LARGE_INTEGER WindowsTimer::_frequency 추가하기이

LARGE_INTEGER WindowsTimer::_frequency = 0; 
-1

같은 CPP 파일에 정의해야있을 경우 .

+1

이것은 'extern'때문에 작동하지 않습니다. 내 컴파일러가 말하길 *'오류 : 명시 적으로 멤버 'LARGE_INTEGER WindowsTimer :: _ frequency'에 extern linkage *를 선언 할 수 없습니다. 그리고 'extern'이없는 동일한 해결책은 이미 세 가지 다른 답변에서 언급되었습니다. – HolyBlackCat

+0

그것은 나를 위해 일했다. –

+0

LARGE_INTEGER은 무엇입니까 ?? –

관련 문제