Рассмотрим следующий пример файла заголовка: 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 включен в несколько модулей компиляции, которые приводят s компоновщик (правильно) жалуется, что:
ошибка LNK2005: «char const * const Shared_CString» (? Shared_CString @@ 3PBDB), уже определенная в First_Compilation_Unit.obj
Удаление константы Shared_CString из этого файла устраняет проблему.
Итак, у меня два вопроса.
Во-первых, почему константа Shared_Int не вызывает ту же проблему?
Во-вторых, как лучше всего разрешить отдельным единицам компиляции использовать одно и то же значение постоянной строки?