0

현재 게임 엔진을 irrKlang 사운드 엔진과 통합하기 위해 노력하고 있으며 지속적인 오류를 다루고 있습니다. 간체 :왜이 코드는 컴파일러 오류 C2227을 생성합니까?

fsCore.h

class fsEngine 
{ 
public: 
    static fsEngine *getInstance(); 
    static void release(); 
    ; 
private: 
    static fsEngine *instance; 
    static fsBool exists; 
    irrklang::ISoundEngine *soundEngine; 
}; 

fsCore.cpp

#include "fsCore.h" 
void fsEngine::release() 
{ 
    exists = false; 
    delete instance; 
    soundEngine->drop(); //C2227 
}; 

엔진이 올바르게 선언되고, 예상대로 싱글을 수행하고 있습니다. 어떤 아이디어?

+6

만약'릴리스()'정적 어떻게 할 수있는 * 인스턴스 * 구성원이 액세스'soundEngine'? –

+0

[여기] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

답변

3

C2227에 대한 설명은 Compiler Error C2227입니다. 컴파일러는이 라인에 도달

:

soundEngine->drop(); //C2227 

soundEngine 그것에 drop()를 호출하기 위해 클래스/구조체/노동 조합에 대한 포인터해야 함을 알려줍니다. 실제 문제는 정적 함수에서 비 정적 데이터 멤버에 액세스하려고한다는 것입니다. (

instance의 값이 여전히 동일한 주소로 설정됩니다
delete instance; 

,이 포인터가 무효가되었다했습니다

또한 delete 포인터 자체의 값을 변경하지 않습니다, 그래서이 줄 끝에서 실행됩니다 매달려). 그것은 포인터에 NULL를 할당하는 것이 좋습니다 한 후 delete 그것을 :

delete instance; 
instance = NULL; 
+0

감사합니다. 그렇다면 비 정적 함수에서 정적 변수에 액세스 할 수 없다는 뜻입니까? LNK2001. – Catsup

+1

@Catsup : 비 정적 멤버 함수에서 정적 멤버에 액세스하는 것은 완벽합니다. – LihO

+0

링크 오류는 생성 된 파일 외부에서 정적 변수에 액세스하려고 시도한 것이 었습니다. – Catsup

관련 문제