C++ C++;与Extern一起;";导致重复符号错误

C++ C++;与Extern一起;";导致重复符号错误,c++,extern,include-guards,C++,Extern,Include Guards,我试图在头文件中使用一个外部“C”函数来实现C++类。 当我编译时,我不断地得到错误 duplicate symbol _currentInstance in: main.o GLHandler.o 我以为我有合适的后卫,但似乎不明白为什么会这样。任何帮助都将不胜感激 这是头文件 #ifndef GLHANDLER_H #define GLHANDLER_H #include "LoadedObject.h" #ifdef __cplusplus extern "C" { void di

我试图在头文件中使用一个外部“C”函数来实现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

编辑:David很快指出,extern GLHandler*currentInstance修复了错误。

此问题与
extern“C”
声明无关-您在标题中定义了一个全局变量,因此它在每个编译单元中都有定义:

GLHandler *currentInstance;
在标题中,应改为使用:

extern GLHandler *currentInstance;
然后,在一个.cpp文件中,有:

GLHandler *currentInstance;

作为一个旁注,正如它现在所说的那样,报头只有C++才有效,因为它有一个类定义。

\ifdef\uuucplusplus指令是毫无意义的混乱(尽管无害)。

此问题与
外部“C”
声明无关-您在标题中定义了一个全局变量,因此它在每个编译单元中都被定义:

GLHandler *currentInstance;
在标题中,应改为使用:

extern GLHandler *currentInstance;
然后,在一个.cpp文件中,有:

GLHandler *currentInstance;

作为一个旁注,正如它现在所说的那样,报头只有C++才有效,因为它有一个类定义。

#ifdef uu cplusplus
指令是毫无意义的混乱(尽管无害)。

也许应该是
extern GLHandler*currentInstance?您肯定在main.c和GLHandler.c中都实现了这个函数。或者你把它放进一个头文件而不是内联它?您肯定在main.c和GLHandler.c中都实现了这个函数。或者将其放入头文件而不是内联。