Я пытаюсь использовать функцию extern «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();
}
#endifclass 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
РЕДАКТИРОВАТЬ: быстро указал Дэвид, extern GLHandler * currentInstance исправил ошибку.
Эта проблема не имеет ничего общего с extern "C"
объявление — вы определяете глобальную переменную в заголовке, поэтому она определяется в каждом модуле компиляции:
GLHandler *currentInstance;
В заголовке вы должны вместо этого использовать:
extern GLHandler *currentInstance;
затем в точно один .файл cpp имеет:
GLHandler *currentInstance;
В качестве примечания, в его нынешнем виде заголовок действителен только для C ++, поскольку у него есть определение класса. #ifdef __cplusplus
директивы бесполезны (хотя и безвредны).
Других решений пока нет …