Quelle est la solution à l’erreur de compilation – erreur fatale C1189 : #error : erreur dans l’utilisation de la bibliothèque standard C++

la programmation


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.

C++
#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.

コメント

タイトルとURLをコピーしました