2012-09-23 79 views
0

我想在我的頭文件中使用一個extern「C」函數爲一個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 

編輯:迅速指出了大衛的EXTERN GLHandler * currentInstance固定的錯誤。

+2

也許這應該是'extern GLHandler * currentInstance;'? –

+0

你當然在main.c和GLHandler.c中實現了這個函數。或者你把它放到一個頭文件中,而不是內聯。 – 2012-09-23 04:43:24

回答

3

這個問題無關與extern "C"聲明 - 你定義在頭一個全局變量,所以它得到每個編譯單元定義:

GLHandler *currentInstance; 

在標題中,你應該使用:

extern GLHandler *currentInstance; 

然後在只有一個 .cpp文件有:

GLHandler *currentInstance; 

作爲一個方面說明,就像現在這樣,頭只對C++有效,因爲它有一個類定義。 #ifdef __cplusplus指令是毫無意義的混亂(雖然無害)。