C++ 外部"C"导致重复符号错误

C++ with Extern "C" causing Duplicate Symbols Error

本文关键字:符号 错误 外部 C++      更新时间:2023-10-16

我正在尝试在头文件中为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指令是毫无意义的混乱(尽管无害)。

相关文章: