Как «спрятать» переменную внутри заголовочного файла? - PullRequest
0 голосов
/ 12 февраля 2012

Заголовочный файл содержит две переменные. Из-за структуры моей программы у меня есть две ошибки «ld: duplicate symbol». Эти две переменные имеют только локальное значение. Есть ли способ сделать эти переменные "закрытыми", чтобы они не были видны вне файла заголовка, даже если файл заголовка включен в другой исходный файл?

РЕДАКТИРОВАТЬ: скажите, пожалуйста, было бы хорошо, если бы я поместил переменные в файл cpp? Эти переменные являются очень большими массивами, определенными при инициализации, и занимают много строк кода ...

extern char Lookup[][3] = {  "aa", "ab", "ac", "ad", "ae", "af", ... and so on (really long)}

Ответы [ 3 ]

5 голосов
/ 12 февраля 2012

Решение состоит в том, чтобы не определять переменные в вашем заголовочном файле.

Если вам абсолютно необходимо совместно использовать переменные между внутренними исходными файлами (и я рекомендую этого не делать), то вам следует сделать следующее:

  1. Создайте "internal.h".
  2. Объявите вашу переменную extern в этом заголовочном файле.
  3. Включите "internal.h" в оба ваших внутренних исходных файла.
  4. Определение переменной в одном или других внутренних исходных файлах.

Переменная теперь скрыта от внешнего мира. (Возможно, он все еще виден в ваших объектных файлах, но вы можете использовать хитрость для конкретной платформы, чтобы убрать его.)

3 голосов
/ 12 февраля 2012

Не указывайте переменную в заголовках.

Используйте extern для объявления переменной в заголовке без ее определения.

0 голосов
/ 12 февраля 2012

Я всегда устал от переменных, которые находятся "на свободе".Я имею в виду: они на что-то влияют, не так ли?Они «принадлежат» классу?

Разве вы не должны просто объявить их в классе, а затем объявить их как статические переменные?(А учитывая синтаксис, наверное, тоже константы)?В этом случае вы можете просто использовать все, что обычно делается со статическими переменными (списки инициализаторов, функция статической инициализации и т. Д.).Мне кажется, гораздо понятнее, так как теперь ваша переменная связана с чем-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...