Question

Est-ce que quelqu'un sait comment faire fonctionner IntelliSense de manière fiable lorsque vous travaillez sur des projets C/C++ ?Cela semble fonctionner pour environ 1 fichier sur 10.Visual Studio 2005 semble être bien meilleur que 2008.

Modifier:Bien que ce ne soit pas nécessairement une solution, la solution de contournement proposée ici :

Comment faire fonctionner IntelliSense de manière fiable dans Visual Studio 2008

C’est probablement le meilleur choix si je veux un système IntelliSense décent.

Était-ce utile?

La solution

J'ai également réalisé qu'Intellisense est parfois « perdu », sur un gros projet.Pourquoi?Aucune idée.

C'est pourquoi nous avons acheté Assistance visuelle (depuis Logiciel Tomate) et désactivé Intellisense en supprimant la dll feacp.dll dans le sous-répertoire Visual Studio (C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages)

Ce n'est pas une solution, juste une solution de contournement.

Autres conseils

Intellisense C++ natif ne fonctionne de manière fiable dans aucune version de Visual Studio.Je trouve qu'il y a deux problèmes courants :

1) Les chemins des fichiers d’en-tête ne sont pas configurés correctement.Lorsque vous trouvez un type sur lequel Intellisense ne fonctionne pas, utilisez l'EDI pour cliquer sur chaque fichier d'en-tête afin de trouver celui contenant le type.(Cliquez avec le bouton droit sur #include et sélectionnez Ouvrir le document...).Si cela échoue avant d'accéder au fichier qui déclare le type, c'est votre problème.Assurez-vous que les chemins de recherche des fichiers d'en-tête sont correctement configurés.

Et,

2) La base de données Intellisense est corrompue.Ça arrive tout le temps.Vous devez fermer la solution, supprimer le fichier .ncb, puis rouvrir la solution.J'ai posté la macro que j'utilise pour cela en réponse à une autre question ici.


Le préprocesseur peut également confondre Intellisense - alors assurez-vous que tous les #defines pendant la construction sont également disponibles pour Intellisense.A part ça, je ne sais pas quoi d'autre peut le casser.Je n'ai vu aucun problème particulier avec les déclarations anticipées.

Il semble qu'il y ait de l'espoir à l'horizon pour ceux d'entre nous qui ne peuvent pas obtenir Visual Assist :

Reconstruire Intellisense

Avez-vous des compléments installés (ou désinstallés) ?Je trouve que cela affecte mon intellisense.

En plus de cela, assurez-vous simplement que vos outils-> Options-> Éditeur de texte-> Toutes les langues "Membres de la liste automatique" et "Informations sur les paramètres" sont cochés.

Je n'utilise pas VS2008 pour C++, uniquement VB et C#, mais je trouve que lorsque IntelliSense cesse de fonctionner (vrai pour VS2003/2005/2008), c'est parce que quelque chose dans le projet/fichier est cassé - généralement une mauvaise référence ou un mauvais code.

VB et C# ont une bien meilleure prise en charge d'Intellisense en raison de la possibilité de réfléchir sur les assemblys référencés pour créer l'arborescence IntelliSense.

C++ doit parcourir les fichiers d'inclusion pour les prototypes de fonctions, et si les chemins ne sont pas corrects, il ne trouvera pas tous les en-têtes des prototypes.

Mon correctif pour itellisense était nécessaire après que cet horrible utilitaire de refactorisation ait émincé mon code.Le problème était un fichier d'en-tête de classe qui incluait un #include lui-même.La référence récursive détruit itellisense.Un symptôme en est que itellisense peut voir d'autres classes mais pas la classe actuelle.Aussi:

Utilisez #pragma une fois pour éliminer les charges d'en-tête en double

Si le chargement du projet prend maintenant beaucoup plus de temps, cela a du sens d'essayer de donner un sens au conflit qui est à l'origine du manque de support pour l'achèvement.

Souvent, un seul objet de classe est affecté. Cela vous montre quels fichiers (généralement les en-têtes) consulter.

@John Richardson / @Jonathan Hollande

Mes inclusions sont correctement configurées, aucun problème.J'ai également essayé plusieurs fois la reconstruction de la BCN, mais elle ne le répare jamais à 100 %.

J'ai le sentiment que cela peut être lié aux déclarations anticipées de classes.par exemple.pour réduire la complexité des inclusions dans les fichiers d'en-tête, nous faisons normalement quelque chose comme :

class MyPredeclared;

class SomeOtherClass
{
private:
    MyPredeclared* m_pPointer;
}

Je me demande si ça fait tout foirer ?D'autres idées ?Cela empire certainement à mesure que votre projet prend de l’ampleur.

J'ai eu un problème très ennuyeux, Intellisense ne fonctionnait que dans certains fichiers, sans raison évidente...cela m'a pris quelques heures à fouiller sur google, mais j'ai finalement compris que la raison était bien une référence récursive !J'utilisais le :

#ifndef CLASS_H
#define CLASS_H
...
#endif

pour éviter la redéfinition des symboles, ce qui brise parfois l'intellisense dans les grands projets.

Mais il suffit de commenter ifndef-define-endif et de mettre un :

#pragma once 

au début des fichiers d'en-tête pour toujours éviter les redéfinitions et faire fonctionner Intellisense à nouveau =)=)

Au moins, cela a fonctionné pour moi, j'espère que c'est utile...

Cheers Francesco

J'ai récemment étudié Intellisense dans VS2008, car je développe une assez grande bibliothèque d'algèbre linéaire numérique C++ où les modèles et autres sont largement utilisés.Intellisense a arrêté de travailler peu de temps après le début du projet et j'ai en quelque sorte abandonné, mais maintenant, cela devenait vraiment ennuyeux sans cela, alors j'ai commencé à enquêter.Voici ce que j'ai découvert :

En supposant qu'il existe un ou plusieurs fichiers contenant du code qui "casse" Intellisense,

  • si les fichiers d'en-tête qui cassent Intellisense sont dans le projet, mais ne le sont pas #included, ça marche toujours dans le reste des fichiers
  • s'ils sont inclus, mais qu'aucun type déclaré à l'intérieur n'est utilisé, cela fonctionne toujours
  • s'ils sont inclus et qu'un type déclaré à l'intérieur est utilisé, cela peut encore fonctionner un peu (pas d'Intellisense pour les membres, pas d'Intellisense après l'apparition d'un type donné, mais au moins des noms globaux et des informations sur les arguments avant)
  • si Intellisense est cassé dans un fichier .cpp, il peut toujours fonctionner dans les autres où le code problématique n'est pas inclus ou utilisé (mais j'imagine que s'il plante gravement, il sera désactivé pour l'ensemble du projet, même si cela ne s'est pas produit moi)
  • Intellisense semble être mis à jour après une compilation réussie (parfois pas avant)
  • mettre du code cassé dans l'un des #if 0, /* .. */ ou // semble mettre Intellisense à l'aise

Parmi les fonctionnalités C++ que j'ai utilisées, seules quelques-unes cassent Intellisense :

  • comparaison avec '>' ou '>=' dans le paramètre du modèle (par ex. static_assert<(size > 0)>)
    • non résolu en utilisant des doubles parenthèses (static_assert<((size > 0))> n'aide pas)
    • résolu en utilisant '<' ou '<=' à la place (static_assert<0 < size> travaux)
    • résolu en stockant la valeur dans enum et en l'utilisant pour spécialiser le modèle
  • La spécialisation explicite des modèles de fonctions désactive les informations sur les arguments (par ex. function<type>(args))
    • probablement incapable de résoudre (peut-être d'inclure une macro), mais je peux vivre avec une rupture
  • instanciation du type de membre de modèle, tel que Matrix::MakeMatrixType<3, 3>::Result r;
    • un peu difficile de comprendre exactement pourquoi cela se produit (probablement à cause de l'utilisation d'Eigen)
    • solution de contournement en déplaçant ce code dans un .cpp séparé où IS ne fonctionnera pas (pas toujours possible)

Il semblerait que certains de ces problèmes soient dus à une analyse "simplifiée", qui est moins puissante qu'un analyseur C++ approprié.Avec les informations ci-dessus à portée de main, une méthode « fiable » pour faire fonctionner Intellisense dans un code existant :

  1. Configurez un projet vide (une application console), créez Main.cpp avec un mannequin void main() {} dedans.
  2. Incluez l'un de vos fichiers d'en-tête cassés, et math.h
  3. Build (il doit compiler pour qu'Intellisense se mette à jour de manière fiable)
  4. Testez si Intellisense fonctionne en tapant par ex. sin( et voir si une aide à l'argumentation apparaît.Parfois, cela fonctionnerait, mais pas l’aide des membres – alors essayez-le également.
  5. Créez une instance de quelque chose dans le fichier d'en-tête, construisez, voyez si cela parvient à tuer IS.
  6. Supprimez le code du fichier coupable et passez à l'étape 3
  7. Après avoir trouvé et corrigé le code problématique, remettez le code supprimé à l'étape 5, réessayez
  8. Après avoir bien fait fonctionner une classe entière, créez une instance de la classe suivante, et ainsi de suite...

J'ai trouvé facile de cette façon d'identifier les emplacements de code qui posaient des problèmes (je me rends compte que cela pourrait être irréalisable pour de très gros projets, dans mon cas, un seul fichier sur 97 a posé des problèmes).Notez que « Construire » fait ici référence à la compilation, l'étape de liaison n'a pas besoin d'être terminée, donc les éléments externes non résolus sont ok, le SI doit être mis à jour malgré tout.

Une autre méthode de mise à jour du SI (autre que la construction) consiste à tout enregistrer, à fermer l'espace de travail, à supprimer le fichier .ncb et à le rouvrir.Attendez ensuite "Mise à jour d'Intellisense..."(N)' pour disparaître de la barre d'état (N compte vers zéro, s'il ne va pas jusqu'au bout, cela montre en quelque sorte la progression là où des problèmes sont survenus).J'ai trouvé cela plutôt fastidieux.

À propos de ce problème, j'ai remarqué quelque chose d'intéressant (sur Visual Studio 2010) :pour résoudre ce problème, j'ai changé #include sintax dans mes fichiers d'en-tête, c'était auparavant (ancien projet réalisé avec VS 2005 et rouvert avec VS 2010) :

#include <myfile.h> 

et je répare ça avec :

#include "myfile.h"

Après qu'Intellisense commence à fonctionner correctement !J'espère que cela pourra aider !

J'ai dû réinitialiser les paramètres...

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE>devenv.exe /ResetSettings

fil de discussion à ce sujet ici

Le problème vient des fichiers .vcproj.

Vous constaterez que si vous passez du mode débogage au mode release, construisez, puis essayez Intellisense, cela fonctionne souvent.

Fermez Visual Studio.Si vous recherchez les fichiers .vcproj dans votre projet, modifiez-les et recherchez les deux premières instances de AdditionalIncludeDirectories.La valeur de ceci devrait ressembler à "..\,....\" plutôt qu'à "../..".

Rouvrez votre projet, laissez l'Intellisense terminer la construction, puis il devrait être corrigé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top