Я знаю, что этот вопрос старый, но он все еще может быть полезен для кого-то.
Глобальная переменная (здесь: MyClass inst
) не должна быть extern
для единицы компиляции, которая определяет it (здесь: A.cpp
)
Один из способов достижения этого:
- объявите вашу глобальную переменную в отдельном заголовке (скажем
global.h
) и включите этот заголовок в * cpp, используя их.
- удалить ключевое слово
extern
для модуля компиляции, которое определяет их (например, с #ifdef
):
global.h выглядит так:
#ifdef A_H_
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN MyClass inst;
пока A.h выглядит так:
#ifndef A_H_
#define A_H_
// your header content (without globals)
#endif /* A_H_ */
и A.cpp:
#include "A.h"
#include "global.h" // after A.h inclusion, we need A_H_ definition
Надеюсь, это поможет!