C++ C++;与Extern一起;";导致重复符号错误
我试图在头文件中使用一个外部“C”函数来实现C++类。 当我编译时,我不断地得到错误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
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中都实现了这个函数。或者将其放入头文件而不是内联。