我正在尝试在头文件中为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
编辑:大卫迅速指出,外部GLHandler *currentInstance修复了错误。
这个问题与extern "C"
声明无关 - 你在标头中定义一个全局变量,所以它在每个编译单元中定义:
GLHandler *currentInstance;
在标头中,您应该改为使用:
extern GLHandler *currentInstance;
然后在一个.cpp文件中具有:
GLHandler *currentInstance;
作为旁注,就目前而言,标头仅对C++有效,因为它具有类定义。 #ifdef __cplusplus
指令是毫无意义的混乱(尽管无害)。