«Не удается открыть исходный файл» для заголовочных файлов установленного SDK - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь продолжить работу над проектом C ++, который начал кто-то другой.Чтобы открыть проект, мне пришлось установить рабочую нагрузку C / C ++;Я сделал это и уже перезапустил мой компьютер.

Проект изначально был нацелен на версию Windows SDK, отличную от той, которая установлена ​​на моем компьютере.Это привело к тому, что Visual Studio IntelliSense сказал мне «Невозможно открыть исходный файл» для заголовочных файлов SDK, например stdio.h или string.h.

Я перешел к настройкам проекта> Каталоги VC ++> Включить каталоги> Редактировать иувидел, что переменные расширились в неправильные пути.Таким образом, я приступил к перенаправлению проекта на версию Windows SDK, которая в настоящее время установлена ​​на моем ПК (10.0.17763.0).

Теперь, если я проверяю «Включить каталоги», я вижу, что «Наследуется от родительских или проектных значений по умолчанию », унаследованное значение равно

$(VC_IncludePath)
$(WindowsSDK_IncludePath)

, и это расширяется до

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um

Я проверил, что все эти каталоги существуют на моем компьютере.

Однако VS постоянно говорит мне, что не может открыть исходные файлы, даже после очистки и перестройки всего решения.Кажется, что проект компилируется, но код весь волнистый.

Я включаю:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <float.h>
#include <string.h>
#include <stdarg.h>
#include <limits.h>
#include <locale.h>
#include "svm.h"

Только stdarg.h, limits.h (оба из C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include\) и svm.h (в проекте) работа.Все другие включения имеют эту ошибку;все они приходят из каталога C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt, я могу найти их все в этом каталоге.

Я заметил, что когда я набираю #include < и позволяю IntelliSense предлагать включить, он также не предлагает те из любого изC:\Program Files (x86)\Windows Kits\10\ подкаталоги.Эти заголовочные файлы перечислены в узле проекта «Внешние зависимости».

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

Я в основном новичок в C ++ и всей "магии заголовков", так что это может быть связано с проектом.Я обнаружил, что проект содержит некоторый файл "stdafx.h" (который я читал для предварительно скомпилированных заголовков), однако в настройках проекта говорится, что не использует предварительно скомпилированные заголовки, и действительно я не вижу ни одного файла *.pchлибо.

1 Ответ

0 голосов
/ 11 февраля 2019

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

Я делал это раньшеи тогда это не помогло, поэтому, к сожалению, я не знаю, почему это помогло во второй раз.Как бы неудовлетворительно это ни было - кажется, что это проблема с кэшированием после всего, что даже сохранялось после очистки и восстановления.

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

Я не очень доволен этим результатом, потому что мне хотелось бы понять, что помогло и почему, но в конце концов это решило проблему.Так что, похоже, вам нужно перенастроить, затем очистить, затем перестроить, возможно, перезапустить VS и отредактировать некоторые операции импорта, чтобы принудительно сделать любой кеш, который должен быть признан недействительным.в StackOverflow.Видимо это помогает.Таким образом, я отмечаю это как ответ сообщества.

...