Проблема с включенной защитой - PullRequest
5 голосов
/ 31 мая 2010

Когда я добавляю охрану включения в свой заголовочный файл для проекта Visual C ++, он выдает мне следующее предупреждение и ошибку:

предупреждение C4603: '_MAPTEST_H': макрос не определен или определение отличается после использования предварительно скомпилированного заголовка

Добавить макрос в предварительно скомпилированный заголовок вместо определения здесь

. \ MapTest.cpp (6): использование предварительно скомпилированного заголовка ** // предварительно скомпилированный заголовок stdafx.h включен в эту строку

. \ MapTest.cpp (186): фатальная ошибка C1020: неожиданный # endif

но когда я добавляю предварительно скомпилированный заголовок перед включаемым защитником, предупреждение или ошибка не выдаются. В чем причина?

Ответы [ 2 ]

17 голосов
/ 31 мая 2010

Две проблемы, о которых я могу думать:

  1. Согласно this Visual C ++ ничего не скомпилирует до строки, в которую вы включаете stdafx.h - поэтому эта строка должна быть самой первой в файле. Если вы поместите его после определения макроса, оно будет пропущено, поэтому вы увидите ошибки.

  2. Идентификаторы, начинающиеся с начального подчеркивания и заглавной буквы (или двойного начального подчеркивания), зарезервированы, что может привести к конфликту имен. см. этот ответ для более подробной информации.

2 голосов
/ 05 декабря 2014

Попробуйте открыть stdafx.cpp и добавьте туда свое определение макроса! Я надеюсь, что ваша проблема решена

...