Ошибка с6031 visual studio

Обновлено: 01.07.2024

Видимо доигрался я с метапрограммированием и 2015-я студия решила забить на анализ моего кода.
Итак, значит всё отлично работало, я делал свои штуки на шаблонах, студия почти всегда всё корректно подсвечивала разными цветами и давала подсказки. Иногда конечно тупила и подчёркивала ошибки там, где их нет, но в целом нормально.
Потом я решил начать добавлять в свою либу пространства имён, чтобы не захламлять глобальное пространство имён. Запихнул все метапрограммистические штуки в пространство имён Meta. Естественно всё полетело, возникла куча ошибок, как и ожидалось, потому что код, который всё это использовал, ещё не был исправлен. При таких кардинальных изменениях и intellisense мог давать сбой, поэтому я не удивился. Но когда я всё починил, и код стал нормально компилироваться, intellisense так и не ожил.
То есть всё белое (использую чёрную тему), не раскрашенное. Но в тоже время красным ничего не подчёркивается. Подсказки при вводе скобок, запятых и так далее не отображаются. При наведении мышью нет никаких всплывающих подсказок. GoTo Definition работает, но закидывает совсем не туда, куда надо - видимо просто поиск по слову срабатывает.
В статус баре студия пишет: IntelliSense: "Дополнительные сведения недоступны" (дальнейшие указания см. в справке "Устранение неполадок IntelliSense в проектах C++"). Справку смотрел, но решения проблемы в ней не нашёл.

Первое, что я попробовал - обновить студию с Update 3 до Update 4. Это же почти переустановка, если проблема в студии, то она должна была решиться. Апдейт как раз подоспел, а у меня руки не доходили потратить полдня на его установку. Обновил, не помогло. Потом сделал devenv /resetuserdata. Слетели все настройки, которые я так тщательно когда-то настраивал, особенно цвета семантической подсветки синтаксиса. Но опять не помогло. Пробовал удалять все временные файлы типа sdf и других. В конечном итоге решил, что надо пересоздавать проект и настроить его с нуля. Пересоздал, вставил туда свой код, опять подсветка пропала.
В других проектах IntelliSense отлично работает. Даже в том решении, где изначально IntelliSense слетел, есть тестовые проекты типа Hello World'а, где работает.
Видимо всё, что включает мои хидеры с шаблонной магией или чем-то её использующим, сразу же убивает IntelliSense.

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

P.S. Просьба не злорадствовать, а помочь. От этого зависит судьба моей либы и моего движка, и мне очень важно решить эту проблему. Я бы мог перейти на какой-нибудь Eclipse CDT, но даже если там всё хорошо, это не поможет другим пользоваться моей библиотекой. Я ведь хочу, чтобы она была не только для меня.

gammaker
> Я бы мог перейти на какой-нибудь Eclipse CDT, но даже если там всё хорошо, это
> не поможет другим пользоваться моей библиотекой. Я ведь хочу, чтобы она была не
> только для меня.
Переходи не на IDE а на систему сборки. CMake, Waf и т.д.
CMake сейчас очень хорошо работает в связке Qt Creator'ом а он сам легко "подцепляет"
msvc компилятор и дебагер.

TheLightWay
> Переходи не на IDE а на систему сборки. CMake, Waf и т.д.
При чём тут системы сборки вообще? Народ же в основном использует студию. А в ней intellisense отваливается из-за кода, содержащегося в инклюдах. Чем тут системы сборки помогут людям, использующим студию?

Так, я нашёл минимальный код, который убивает intellisense:

Расширение компилятора __if_exists я использовал для реализации кое-какой штуки на шаблонах. Её можно сделать средствами чистого C++ и она работала в Clang и Visual Studio 2015, но не работала в Visual Studio 2013. По этому я директивами препроцессора сделал так, чтобы в студии использовался обходной вариант, использующий это расширение. Видимо этот код я написал непосредственно перед тем, как внедрять пространство имён и сразу не заметил того, что intellisense сломался.

gammaker
> При чём тут системы сборки вообще?
А ты про них почитай. Система сборки даст тебе и .sln разных версий
и еще много чего. Это то что нужно народу + тебе не придётся поддерживать кучу ide.
А IntelliSence я еще с Visual Studio 6.0 не полагался он бывало падает.
И кстати если проект <<Реально объемный>> то его MS VS IDE просто не выдержит это давно известно.
Системы сборки и как бонус генерации проектных файлов для разных ide это просто панацея + там еще
можно custom build step'ы делать (шёпотом:и забыть о твоей шаблоногрязи ) и они будут везде работать (при условии прямых рук)
Нужно просто набравшись терпения разобраться с выбранной системой сборки, а дальше только вперёд.
Да и к примеру git фигово всякие там солюшны держит не надёжно.

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

romgerman
У нас системы сборки проектов позволяют очень гибко разбивать большие проекты
разделяя работу между сотрудниками а уж каждый грузит в свою (необходимую\любимою) ide
и там все видит. Еще раз системы сборки позволяют генерировать проектные файлы и
совсем не обязательно генерить их для всего проекта.
Курите Flow Development.

TheLightWay
> А ты про них почитай. Система сборки даст тебе и .sln разных версий
> и еще много чего. Это то что нужно народу + тебе не придётся поддерживать кучу ide.
Если большая часть народа пишет в студии, то она никуда не захочет переходить, особенно из-за какой-то моей либы. Даже если это будет легко благодаря системе сборки.
Ты вообще не по теме пишешь. Я ведь спрашивал, почему студия сломалась и как починить. Правда я уже сам нашёл проблему.

TheLightWay
> И кстати если проект <<Реально объемный>> то его MS VS IDE просто не выдержит
> это давно известно.
Ну так, 50К строк. Вроде отлично справляется, после того, как я убрал проблемные 2 строчки, вызывающие отвал IntelliSense.

TheLightWay
> шёпотом:и забыть о твоей шаблоногрязи
Какое система сборки имеет отношение к моим шаблонам вообще? Она что, умеет оперировать типами C++ во время компиляции? Нет, не умеет, это может делать только компилятор.

CMakeLists.txt я планирую написать, когда буду распространять свой проект, потому что так принято. А самому и в студии норм.

romgerman
> У вас системы сборки проектов подсвечивают синтаксис в файлах, проводят
> статический анализ и говорят об ошибках в коде? Я вот что-то не уверен.
+1

TheLightWay
> У нас системы сборки проектов позволяют очень гибко разбивать большие проекты
У меня эти шаблоны в самом ядре проекта. Какую часть проекта ни возьми, там будет инклюдиться хидер, использующий метапрограммирование. Метапрограммирование ведь нельзя спрятать в cpp, оно всегда в хидерах должно быть.
И весь проект у меня компилируется считанные секунды, поэтому разбивать его опять же нет смысла.

gammaker
Я про то что CMakeLists.txt даст тебе sln а не наоборот.
Про intellsence я сразу сказал он может слетать и вряд-ли тут
дистанционно угадаешь\поможешь
offtop:
А еще про то что CMake add_custom_target + phyton например уделает
твой метахидер и сохранит совместимость при желании даже с жутким старьём.
А тут твой пользователь должен будет обязан использовать крутой компилятор
В реальной жизни это может уткнутся в корпоративную ценовую политику типа:
"Большой Начяльник: "нафига вам msvs я не проггер но читал про бесплатный mingw и clang".

TheLightWay
> Я про то что CMakeLists.txt даст тебе sln а не наоборот.
Я в курсе. Но этот sln будет какой-то не такой, неродной.

TheLightWay
> В реальной жизни это может уткнутся в корпоративную ценовую политику типа:
> "Большой Начяльник: "нафига вам msvs я не проггер но читал про бесплатный mingw
> и clang".
В таком случае ещё лучше. GCC и Clang на несколько лет опережают студию по фичам. По идее должно работать в GCC 4.8, которая по умолчанию идёт во всех актуальных дистрибутивах Linux. А для тех у кого студия, у меня есть поддержка 2013+. Я думаю этого вполне достаточно, на 2013-то наверное уже почти все перелезть успели.

TheLightWay
> А еще про то что CMake add_custom_target + phyton например уделает
> твой метахидер и сохранит совместимость при желании даже с жутким старьём.
Он максимум заменит препроцессор, но не шаблоны. Он просто не в курсе структуры программы, и не знает где и какой шаблон инстанциировать. Он просто не может знать, потому что это C++ и его знает только компилятор C++.

gammaker
> в курсе. Но этот sln будет какой-то не такой, неродной.
Ты его готовить не умеешь. Во первых на время разработки
из CMake'а убераем install (можно через option) во вторых
генерим sln, когда надо добавить файл - редактируем нужный
CMakeLists.txt и делаем build для ZERO_CHECK метатаргета и солюшн
обновляется (надо reopen сделать).

> В таком случае ещё лучше. GCC и Clang на несколько лет опережают студию по
> фичам. По идее должно работать в GCC 4.8, которая по умолчанию идёт во всех
> актуальных дистрибутивах Linux.
Ну и как им быть с твоим "родным" .sln ?

> Он максимум заменит препроцессор, но не шаблоны. Он просто не в курсе структуры
> программы, и не знает где и какой шаблон инстанциировать. Он просто не может
> знать, потому что это C++ и его знает только компилятор C++.
Угу и Qtшный qmake не в курсе структуры но работает на гигантских проектищах типа Maya
и OpenCXX тож а уж про кучу тулов начиная с тупого bin2c.

CLion пробовали уже?
Пользуюсь на исходнике Erlang VM (чистый си) жрёт немного, кашляет из-за размера и количества макросов, но жрёт )
Крестопроекты пока не пробовал но поскольку она парсит с помощью кланга, думаю и кресты сожрёт точно так же.

QtCreator тоже неплох но мне кажется у него парсер свой поэтому на крестошаблонах может покашливать.

У студии единственная адекватная система парсинга на лету. У остальных всё нааамного хуже.

TheLightWay
> Ну и как им быть с твоим "родным" .sln ?
Есть куча вариантов.
1) Я сделаю CMakeLists.txt. Там всего наверное 5 строчек написать, чтобы просто все исходники скомпилились.
2) Я сделаю файл UnityBuild.cpp, который инклюдит все остальные *.cpp. Достаточно будет лишь указать компилятору путь к этому файлу и путь для инклюдов. Можно компилить как напрямую из командной строки, так и любую IDE настроить, чтобы она это делала.
3) Как 2, только вместо UnityBuild.cpp будет статическая либа.

Применительно к студии:
4) Инсталлятор LLVM автоматически добавляет интеграцию Clang в студию. То есть Clang можно использовать из студии без проблем. А там доступен весь C++11\14.
5) При установке студии 2015 можно отменить галочку установить Clang с Microsoft Codegen. Опять же весь C++14 будет доступен. Но для моей либы в принципе студии и без Clang'а достаточно.

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

kvakvs
> CLion пробовали уже?
Нет. Вроде говорят, что что-то с ним не так, не такая крутая IDE, как ожидалось. Да и платный он. Меня студия всем устраивает, да и Eclipse CDT тоже.

kvakvs
> QtCreator тоже неплох но мне кажется у него парсер свой поэтому на
> крестошаблонах может покашливать.
У креатора какой-то интерфейс нестандартный. Я решил, что я не хочу к нему привыкать, потому что есть студия и Eclipse. Я не нашёл, как там хотя бы цвета семантической подсветки синтаксиса настроить. В Eclipse и студии это сходу находится.

К сожалению, единого метода решения для ошибки «Microsoft Visual C++ Runtime Library» нет, так как причины могут быть разными: отсутствующие или поврежденные компоненты системы, влияние сторонних служб и программ, в некоторых случаях — ошибки в самой запускаемой программе (особенно если она была написана вами лично).

Язык программ, не поддерживающих Юникод и пути к папкам с программой

Этот способ решения часто оказывается результативным для пользователей с русскоязычными версиями Windows 10, 8.1 или Windows 7, при условии, что ошибка Microsoft Visual C++ Runtime Library вызывается какой-то сторонней программой, а не системными компонентами, такими как explorer.exe или SystemSettings.exe.

Изменение языка программ, не поддерживающих Юникод

  1. Если запускаемая игра или программа (или её установщик) находится в папке, путь к которой содержит кириллицу (русские буквы), перенесите её в другое расположение или переименуйте папку, попробуйте запустить. Например, если ваше имя пользователя на русском языке, а файл запускается из папки «Загрузки», то полный путь к ней будет иметь види это может послужить причиной ошибки.
  2. Зайдите в Панель управления (в Windows 10 панель управления можно открыть через поиск на панели задач) — Региональные стандарты, откройте вкладку «Дополнительно» и в разделе «Язык программ, не поддерживающих Юникод» нажмите «Изменить язык системы». Выберите «Английский (США)», примените настройки и перезагрузите компьютер, затем проверьте, решило ли это проблему.

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

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

Если указанные шаги не решили проблему, выполните следующие шаги:

Драйверы видеокарты и DirectX

После установки драйверов, DirectX и перезагрузки компьютера, проверьте, была ли решена проблема.

Дополнительные методы решения проблемы

  • Удалить программы, установленные непосредственно перед появлением ошибки. По отзывам, причиной может быть самое разное стороннее ПО, среди примеров: Intel True Key, программы принтеров HP, антивирусы.
  • Использовать точки восстановления системы при их наличии.
  • Выполнить чистую загрузку (не путать с установкой) Windows. Если при чистой загрузке ошибка исчезает, то причина — какие-то программы в автозагрузке или сторонние службы. Можно включать их группами, пока не выявим, что именно вызывает ошибку. Как именно выполнить чистую загрузку описано в инструкции Чистая загрузка Windows. .
  • Отдельная инструкция для этой же ошибки с кодом R6025 pure virtual function call

Ещё один вариант, для случая, когда ошибку вызывает какой-то системный процесс — создать нового пользователя Windows (лучше, если будет использовано имя на латинице), зайти в систему под ним и проверить, сохраняется ли ошибка у этого пользователя.

Видео инструкция

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

А вдруг и это будет интересно:

28.01.2021 в 22:31

Есть вопрос к вам по поводу купленного самсунг 980 про и материнки гигабайт аорус мастер z390 так вот нету ни в одной программе ни информации про смарт ни трим ни Ncq ни остального только есть немного инфы в меджикан. у людей на ютюбе эта информация есть

29.01.2021 в 14:49

10.07.2021 в 12:06

В статью можно добавить sxtrace как один из способов.
У меня прога на работе требует vc++ x86 2005ые, но их оказывается есть несколько версий, и с помощью sxtrace можно точно узнать версию требуемой библиотеки.

Детали системы:
Windows 10
Visual Studio Community 2017 v.15.2 (26430.6)
— Установленная разработка рабочего стола с C ++ (Снимок экрана: Список установки )

Шаг 1: Я написал знаменитую программу Hello World на C ++.

Шаг 2: Я нажал на Построить> Построить решение.

Проблема: ‘Stdio.h’: Данный файл или каталог отсутствует. Полная ошибка:

Детали по устранению неполадок / Вещи, которые я пробовал:

  1. Свойства конфигурации> Каталоги VC ++
    Include Directories $(VC_IncludePath);$(WindowsSDK_IncludePath);
  2. Снимок экрана: Solution Explorer (файлы в проекте)

Код в stdafx.cpp файл:

Код в stdafx.h файл:

Решение

Возникла та же проблема с переносом проекта с VS2013 на VS2017,
Исправлено: измените «Свойства-> Общие-> Версия Windows SDK» на 10

Другие решения

Столкнулся с проблемой пропавших без вести stdlib.h а также stdio.h (а может и больше) после установки VS2017 Community на новый компьютер и переноса решения с VS2013 на VS2017.

Сейчас мои проекты строятся без проблем.

Обратите внимание, что вам может потребоваться сделать проект стартовым проектом для ретаргетинга.

Есть три способа решить эту проблему.

Переустановите Visual Studio
Это также сработало для меня, потому что я понял, что, возможно, что-то не так с моим Windows SDK. Я использовал Windows 10, но с Windows SDK 8.1. У вас может быть и эта проблема.
шаги: Откройте установщик Visual Studio> щелкните трехстрочную строку меню> Удалить> Перезагрузите компьютер> Откройте установщик Visual Studio> Установите то, что вам нужно, но убедитесь, что вы устанавливаете только последнюю версию Windows SDK 10, а не несколько или 8.1.

У меня была похожая проблема после обновления моего VS2017. Проект построен хорошо; но много «ошибок», когда код был поднят в редакторе. Даже попробовал переустановить VS. Я смог решить эту проблему, установив для параметра «Игнорировать стандартные пути включения» значение «Да». Попытка построить решение с большим количеством ошибок. Вернулся и установил опцию на Нет. После восстановления моя проблема ушла.

Если вы не хотите использовать Windows SDK для Windows 10 (например, вы можете работать над проектом с открытым исходным кодом, решение которого не принимается вами), вы можете решить эту проблему в проекте Windows SDK 8.1 с помощью навигационный Tools -> Get Tools and Features. -> Individual Compontents tab и установка отдельных компонентов «Windows 8.1 SDK» (в составе SDK, библиотек и сред) и «Windows Universal CRT SDK» (в разделе «Компиляторы», средства сборки и среды выполнения):

У меня была такая же проблема при создании VS 2013 Project с помощью Visual Studio 2017 IDE.
Решением было установить правильный «Platformtoolset v120 (Visual Studio 2013)». Для этого должен быть установлен Windows SDK 8.1.
Если вы хотите использовать Platformtoolset v141 (Visual Studio 2017), необходимо установить Windows SDK 10.
Platformtoolset может быть выбран в диалоге свойств проекта: General -> Platformtoolset

526 просмотра

1 ответ

103 Репутация автора


Я пытаюсь использовать графическую библиотеку (SFML) для C ++, и у меня возникли проблемы. Я использую Visual Studio 2017. Я посмотрел много уроков на Youtube и получаю ту же ошибку с каждым, что пытаюсь. Я не могу найти решение, так как люди говорят «папки должны быть вместе», что я уже сделал: Вот ошибки, которые я получаю:

E1696 не может открыть исходный файл "stdafx.h" c: Users George source repos Game Game main.cpp 1

E1696 не может открыть исходный файл "SFML / Graphics.hpp" c: Users George source repos Game Game main.cpp 2

Код, который я запускаю (скопированный, с дополнительным):

Раньше в коде не было stdafx.h или std пространства имен, поэтому мне пришлось добавить их, потому что у меня были другие ошибки. Я был бы очень признателен за любую помощь. Спасибо

Ответы (1)

103 Репутация автора

Разобрался несколько дней назад, но забыл опубликовать, как я это исправил. Я скачал 32-битную версию SFML. В свойствах необходимо убедиться, что в нем написано: «Active (win32)» или что-то в этом роде. У меня был мой на "x64", поэтому он не работал. Надеюсь, что это помогло кому-то еще с той же проблемой 🙂


Я пытаюсь использовать графическую библиотеку (SFML) для C ++, и у меня возникли проблемы. Я использую Visual Studio 2017 Я наблюдал много учебников Youtube, и получить ту же ошибку с каждым я стараюсь. Я не могу найти решение, как люди говорят «папки должны быть вместе» , которые я уже сделал: Вот ошибки я получаю:

E1696 не может открыть исходный файл stdafx.h C: Users George источник Repos Game Game main.cpp 1

E0065 ожидается «;» C: Users George источник Repos Game Game main.cpp 5

E1696 исходный файл не может открыть SFML / Graphics.hpp C: Users George источник Repos Game Game main.cpp 2

Код я бег (скопировано с дополнительным):

Перед тем, код не имеют stdafx.h или патезрасе, так что я должен был добавить их, потому что у меня были другие ошибки. Я бы очень признателен за любую помощь. благодаря

Visual Studio unsafe error скриншот

Компилятор в Visual Studio сильно отличается от привычных большинству программистов GCC или CLANG, из-за чего при написании кода на C или C++ очень часто возникают неожиданные проблемы в виде ошибки использования стандартных функций, например, scanf, fopen, sscanf и тому подобным. Студия предлагает заменять функции на безопасные (повезёт, если нужно просто добавить _s к функции с ошибкой, но нередко в этих функциях идёт иной набор аргументов, нежели в обычной программе). Если вы не готовы с этим мириться, то этот пост для вас!

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

Попробовав выполнить сборку проекта, обнаружим те самые ошибки.

Чтобы Visual Studio не тратила ваши нервы, сделаем следующее:

1. Выберем пункт "Проект" в верхнем меню

2. В открывшемся списке щёлкнем по "Свойства название_проекта"

Программа, вводящая два числа и выводящая их

Ошибка компиляции из-за небезопасности функций


3. В появившемся окне выберем Свойства конфигурации , C/C++ , Препроцессор

4. В строке Определения препроцессора допишем в самый конец строку ;_CRT_SECURE_NO_WARNINGS

Свойства конфигурации

Определения препроцессора

OK

6. Попробуем заново выполнить сборку проекта:

Успешная сборка проекта

Ошибки исчезли, сборка прошла успешно и программа прекрасно работает! Теперь можно писать код как обычно, не переживая о необычном поведении Visual Studio!

Фото Перминова Андрея, автора этой статьи

Выпускник МГУ им. М.В. Ломоносова

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

Читайте также: