[ad_1]
J’ai essayé de corriger toutes les erreurs de compilation dans mes codes. Après avoir reçu et mis en œuvre les très bons conseils que j’ai reçus ici[^] où j’avais pste les dernières erreurs de cmpilati.
La nouvelle erreur est la suivante :
1>shell.c
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\yvals_core.h(28) : STL1003 : compilateur inattendu, compilateur C++ attendu.
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\yvals_core.h(29,1) : erreur fatale C1189 : #error : Erreur dans l’utilisation de la bibliothèque standard C++
1>sqlite3.c
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\yvals_core.h(28) : STL1003 : compilateur inattendu, compilateur C++ attendu.
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\yvals_core.h(29,1) : erreur fatale C1189 : #error : Erreur dans l’utilisation de la bibliothèque standard C++
Les vérifications sur Internet montrent que cela peut être lié à une mauvaise utilisation d’une macro. Quelle pourrait être la solution ?
Au fait, j’utilise Visual Studio 2022.
Les informations suivantes pourraient être pertinentes : il ressort du message d’erreur que l’erreur peut être liée à mon inclusion d’un #include “stdAfx.h” dans shell.c et sqlite3.c qui sont des fichiers c pour la base de données intégrée sqlite3. Est-ce mal d’#include “stdAfx.h” dans les fichiers C. Mon expérience dans le passé a été que le visuel oblige à ajouter stdafx.h à tous les fichiers non heaer. Les fichiers C sont-ils exclus ?
J’ai supprimé le fichier d’en-tête stdafx.h et je me suis retrouvé avec les erreurs suivantes :
1>shell.c
1>C:\Users\HP\source\repos\ResultSheets\shell.c(28617,1) : erreur C2857 : l’instruction ‘#include’ spécifiée avec l’option de ligne de commande /Ycstdafx.h est introuvable dans le fichier source
1>sqlite3.c
1>C:\Users\HP\source\repos\ResultSheets\sqlite3.c(250817,1) : erreur C2857 : l’instruction ‘#include’ spécifiée avec l’option de ligne de commande /Ycstdafx.h n’a pas été trouvée dans le fichier source
Le contenu de mon fichier heder est présenté ci-dessous.
#pragma once #define _X86_ #define NOMINMAX // this removes the min and max definitions #include <SDKDDKVer.h> #include <Windows.h> #include <Commctrl.h> #include <tchar.h> #include <stringapiset.h> #include <string.h> #include <cstdio> #include <stdarg.h> #include <cstdlib> // various windows and C RTL headers go here #define _USE_MATH_DEFINES // get PI, e, etc. definitions #include <math.h> #pragma warning( push ) #pragma warning( disable : 4458 ) #include <gdiplus.h> #include <gdiplusheaders.h> #pragma warning( pop ) #include <memory> #include <exception> #include <stdexcept> #include <fstream> #include <filesystem> #include <vector> #include <string> #include <map> #include <set> #include <algorithm> #include <iterator> // other STL headers here #include "resource.h"
Ce que j’ai essayé :
J’ai passé du temps à trouver le code d’erreur après des recherches sur Google.
Solution 1
stdAfx.h
est un en-tête C++ – il contient du code qui n’est pas compris par un compilateur C car il ne fait pas partie du langage C. C++ est un sur-ensemble de C, et non l’inverse !
Vous ne pouvez pas inclure d’en-têtes C++ dans le code C – cela ne fonctionnera pas. Vous devrez écrire votre application en C++ pour utiliser toutes les fonctionnalités du C++ !
Solution 2
Vous avez supprimé le stdafx.h
fichier de votre build, mais vous dites au système de l’utiliser pour créer les en-têtes précompilés.
Cependant, il semble que vous ayez modifié la source de shell.c
et/ou sqlite3.c
pour inclure les en-têtes C++. Apporter de tels changements signifiera très probablement qu’il ne sera pas construit. Vous devez utiliser les fichiers sources d’origine pour créer la distribution. Vous pouvez ensuite lier la DLL à votre propre application.
[ad_2]
コメント