2012-09-23 2 views
0

C++ 클래스의 헤더 파일에서 extern "C"함수를 사용하려고합니다. 내가 오류C++에서 Extern "C"가 중복 된 심볼 오류를 일으킴 오류

duplicate symbol _currentInstance in: 
main.o 
GLHandler.o 

가 계속 컴파일 할 때

은 내가 오른쪽 가드를했지만, 이런 일이 이유를 알아낼 수 없습니다 생각했다. 어떤 도움이라도 대단히 감사 할 것입니다.

다음은 헤더 파일입니다.

#ifndef GLHANDLER_H 
#define GLHANDLER_H 

#include "LoadedObject.h" 


#ifdef __cplusplus 
extern "C" { 
void displayCallback(); 
} 
#endif 



class GLHandler { 

private: 
    LoadedObject *object; 

public: 
    GLHandler(LoadedObject *); 
    void initializeVBO(LoadedObject *); 
    void renderObject(struct model *); 
    void displayFunction(void); 
    model *createModel(void); 
    void setupDisplayCallback(); 


}; 

GLHandler *currentInstance; 

#ifdef __cplusplus 
} 

#endif 

#endif 

EDIT : 신속하게 David에 의해 지적되었으므로 extern GLHandler * currentInstance가 오류를 수정했습니다.

+2

아마도 'extern GLHandler * currentInstance;'가되어야할까요? –

+0

main.c와 GLHandler.c에서이 함수를 확실히 구현하고 있습니다. 또는 헤더 파일에 삽입하고 인라인하지 않습니다. –

답변

3

이 문제는 extern "C" 선언과는 아무 상관이 없다 - 머리글에서 전역 변수를 정의하고이 때문에 각 컴파일 단위에 정의됩니다 : 헤더에

GLHandler *currentInstance; 

대신 사용해야합니다 :

extern GLHandler *currentInstance; 

다음 에 정확히 하나 개의 .cpp 파일이 있습니다

GLHandler *currentInstance; 

부수적으로, 지금 당장은 헤더가 클래스 정의가 있으므로 C++에 대해서만 유효합니다. #ifdef __cplusplus 지시어는 무의미하지만 혼란 스럽습니다.