Рассмотрим следующий пример файла заголовка: shared_example.h
#ifndef SHARED_EX
#define SHARED_EX
const int Shared_Int = 1;
const char * Shared_CString = "This is a string";
#endif
Файл shared_example.h включен в несколько блоков компиляции, что приводит компоновщик(правильно) жаловаться, что:
error LNK2005: "char const * const Shared_CString" (?Shared_CString@@3PBDB) already defined in First_Compilation_Unit.obj
Удаление константы Shared_CString из этого файла устраняет проблему.
Итак, у меня два вопроса.
Во-первых, почему константа Shared_Int не вызывает одну и ту же проблему?
Во-вторых, как можно разрешить отдельным модулям компиляции использовать одно и то же строковое значение константы?