C ++ с Extern «C» вызывая ошибку повторяющихся символов

Я пытаюсь использовать функцию 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 исправил ошибку.

0

Решение

Эта проблема не имеет ничего общего с extern "C" объявление — вы определяете глобальную переменную в заголовке, поэтому она определяется в каждом модуле компиляции:

GLHandler *currentInstance;

В заголовке вы должны вместо этого использовать:

extern GLHandler *currentInstance;

затем в точно один .файл cpp имеет:

GLHandler *currentInstance;

В качестве примечания, в его нынешнем виде заголовок действителен только для C ++, поскольку у него есть определение класса. #ifdef __cplusplus директивы бесполезны (хотя и безвредны).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]