IntelliSense, включая вещи, которые не должны быть включены - PullRequest
0 голосов
/ 05 октября 2011

Я работаю над проектом в Visual Studio 2010. Предполагается, что мой проект не ограничивается Windows, однако один из файлов зависит от ОС.

По этой причине у меня есть #include <windows.h> только в одном файлах .cpp . Ни один другой файл не содержит эти .cpp файлы. Следовательно, логически заголовок windows.h должен быть невидим для остальной части решения.

Это означает, что у меня нет конфликтов имен с объявлениями в библиотеке Windows во всех файлах, кроме этого .cpp , и мой проект компилируется просто отлично.

Однако IntelliSense продолжает настаивать на том, что у меня конфликт имен. Когда я нажимаю Ctrl+Space, IntelliSense предлагает идентификаторы из windows.h. И это в области, где windows.h должно быть невидимым!

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

Я на 100% уверен, что проблема не в структуре моего решения, потому что если я использую идентификатор, уже определенный в windows.h в другой части моего проекта, компилятор не распознает его и не компилировать ... но IntelliSense распознает это!

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Цитата Энди Рича, сотрудника Microsoft, работающего на VC ++, из комментария к этой статье блога: Советы по устранению неполадок для IntelliSense Slowness

База данных просмотра найдет все источникифайлы, которые каким-то образом включены в ваш проект, напрямую или в результате других директив #include.Это не настраивается и необходимо для обеспечения точных ответов в среде IDE.

Так что, к сожалению, ответ - нет, вы ничего не можете сделать, кроме полного отключения IntelliSense.

1 голос
/ 06 октября 2011

Поскольку IntelliSense работает для каждого проекта (.vcproj), а не для решения (.sln), простой ответ - переместить специфичные для Windows детали в их собственный проект внутри вашего решения.

Это также помогает при портировании, поскольку вы можете легче заменить специфичные для Windows детали.

...