0

我正在尝试在头文件中为 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

编辑:大卫很快指出,外部 GLHandler *currentInstance 修复了错误。

4

1 回答 1

3

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

GLHandler *currentInstance;

在标题中,您应该改用:

extern GLHandler *currentInstance;

然后在一个.cpp 文件中有:

GLHandler *currentInstance;

作为旁注,就目前而言,标头仅对 C++ 有效,因为它具有类定义。这些#ifdef __cplusplus指令是毫无意义的混乱(尽管无害)。

于 2012-09-23T04:45:32.350 回答