Il y a trop d'erreurs pour que le moteur IntelliSense fonctionne correctement

veuillez laisser le étiquette d'installateur de fenêtres dans - cette Q / A est pas pour C++ experts , mais pour les gens comme moi, qui utilisent C++ quand ils doivent. Ils peuvent faire face à cette perte de temps potentielle, et ont besoin d'une solution rapide pour obtenir msi.h ou "autres" comprend rapidement opérationnel. Les modèles VS2017 doivent ont un peu changé - je n'ai pas vu ce problème avant.


Visual Studio 2017 Community Edition avec tous les composants C++ installé (peut-être ce problème n'existe pas dans l'édition professionnelle?).

  1. File => New => Project... => Visual C++Windows DesktopWindows Console Application => OK .
  2. faire un test rapide pour vérifier qu'il n'y a pas d'erreurs. Right click solution => Build . Comme indiqué, aucune erreur ne devrait apparaître.
  3. maintenant ajouter cette inclure pour msi.h directement au-dessous de #include stdafx.h juste au-dessus de la fonction main() dans le fichier CPP de la console:
#include <msi.h>
// And just to make things link:
#pragma comment(lib, "msi.lib")
  1. Une erreur rouge chevron doit s'afficher dans le coin en haut à gauche au début de la première ligne de commentaire disant sur le vol stationnaire: " Il y a trop d'erreurs pour le moteur IntelliSense pour fonctionner correctement, certains peuvent ne pas être visibles dans l'éditeur. AVERTISSEMENT DE PCH: une erreur inconnue s'est produite. Un fichier IntelliSense PCH n'était pas générer.

  2. faire un build now devrait révéler de nombreuses erreurs. Dans mon cas de wincrypt.h - et il m'a fait penser à WIN32_LEAN_AND_MEAN - voir la réponse ci-dessous. Je pensais que ces notions de base seraient déjà incluses.

je continue à voir ce problème dans tous les nouveaux C++ Windows Console Application projects , mais quand je tente dans un projet plus ancien créé avec Visual Studio 2013 il compile correctement avec msi.h inclus avec le lien pragma.

à en juger par le message d'erreur, il doit y avoir un problème avec L'en-tête précompilé (PCH). C'est ce que m'a jeté.

0
demandé sur Stein Åsmul 2018-01-06 20:10:33

1 réponses

UPDATE : D'autres ont posé des questions sur le même message d'erreur pour d'autres fichiers include (non liés à MSI). Je suppose que c'est un problème générique qui frappe de temps en temps - probablement avec des classes qui sont peu utilisées (ou inclure Windows.h - peut-être)?

comme un suggestion générale il pourrait s'agir d'un problème de dépendance cachée (une inclusion qui manque), ou d'un ordre incorrect des fichiers include (vous devez changer l'ordre de vos includes pour une raison technique qui n'est pas immédiatement évidente) ou un incorrect ou manquant définit (comme vu dans la réponse au-dessous de la ligne ci-dessous). Mon prendre sur elle: obtenir sur github.com et recherchez des exemples de code .

ces problèmes peuvent être assez compliqués à résoudre pour ceux d'entre nous qui ont besoin de C++ de temps en temps, et autrement être "bien connu" pour les pros C++ (qui le fixent en secondes comme seconde nature). C++ pros: s'il vous plaît gardez à l'esprit que des problèmes tels que ceux - ci peuvent tuer la valeur d'une journée entière de productivité pour ceux d'entre nous forcés de faire le tri avec C++ quand nous avons besoin de - et n'ont pas de C++ pros autour de demander-situation terrible que! :-) - Je déclare une " soyez gentil avec vos C++ guru - si vous avez la journée! ").


Dans stdafx.h , essayez de ce qui est ajouté après #pragma once et avant Autre comprend:

#define WIN32_LEAN_AND_MEAN
// Windows Header Files:
#include <windows.h>

Maintenant, essayez de reconstruire votre solution et voir si le problème a disparu.

bien que simple, l'étrangeté du message d'erreur (vu dans la question ci-dessus) peut jeter les gens hors de cours en essayant de comprendre ce qui ne va pas. En outre, ce comportement semble nouveau dans VS2017 - changement de modèle.

y compris <atlstr.h> , de sorte que probablement fait mon problème plus obscurs. J'aurais pu jurer que j'ai essayé ceci cependant - peut-être après que j'ai fait des changements de paramètres de projet qui ont fait échouer encore (exactement ce que j'espère aider les autres à éviter).

si seulement ces inclusions de base pouvaient être présentes dans le fichier mais commentées pour qu'elles puissent être activées rapidement en séquence pour le test - sans aucune agitation.

0
répondu Stein Åsmul 2018-06-06 17:32:53