Utilisation du code Visual C++ (Concepteur de classes)Working with Visual C++ Code (Class Designer)

Le Concepteur de classes affiche une aire de conception visuelle appelée diagramme de classes, qui fournit une représentation visuelle des éléments de code dans votre projet.Class Designer displays a visual design surface called a class diagram that provides a visual representation of the code elements in your project. Vous pouvez utiliser des diagrammes de classes pour concevoir et visualiser des classes et d'autres types dans un projet.You can use class diagrams to design and visualize classes and other types in a project.

Le Concepteur de classes prend en charge les éléments de code C++ suivants :Class Designer supports the following C++ code elements:

  • Classe (ressemble à une forme de classe managée, mais peut avoir plusieurs relations d'héritage)Class (resembles a managed class shape, except that it can have multiple inheritance relationships)

  • Classe anonyme (affiche le nom généré de l'Affichage de classes pour le type anonyme)Anonymous class (displays Class View's generated name for the anonymous type)

  • Classe de modèleTemplate class

  • StructStruct

  • EnumEnum

  • Macro (montre l'affichage post-traité de la macro)Macro (displays the post-processed view of the macro)

  • TypeDefTypedef

Note

Cela est différent du diagramme de classes UML, que vous pouvez créer dans un projet de modélisation.This is not the same as the UML class diagram, which you can create in a Modeling Project. Pour plus d’informations, consultez Diagrammes de classes UML : indications.For more information, see UML Class Diagrams: Reference.

Résolution des problèmes de résolution de type et d’affichageTroubleshooting Type Resolution and Display Issues

Emplacement de fichiers sourcesLocation of Source Files

Le Concepteur de classes n'effectue pas un suivi de l'emplacement des fichiers sources.Class Designer does not keep track of the location of source files. Par conséquent, si vous modifiez votre structure de projet ou si vous déplacez des fichiers sources dans votre projet, le Concepteur de classes peut perdre la trace du type (surtout le type source d'un typedef, de classes de base ou de types d'associations).Therefore, if you modify your project structure or move source files in your project, Class Designer can lose track of the type (especially the source type of a typedef, base classes, or association types). Vous pouvez recevoir une erreur telle que Le Concepteur de classes n’est pas en mesure d’afficher ce type.You might receive an error such as Class Designer is unable to display this type. Dans ce cas, refaites glisser le code source modifié ou déplacé vers le diagramme de classes pour le réafficher.If you do, drag the modified or relocated source code to the class diagram again to redisplay it.

Problèmes de mise à jour et de performancesUpdate and Performance Issues

Pour les projets Visual C++, la modification dans le fichier source peut prendre 30 à 60 secondes avant d'apparaître dans le diagramme de classes.For Visual C++ projects, it might take 30 to 60 seconds for a change in the source file to appear in the class diagram. Ce délai peut entraîner la génération de l’erreur Aucun type n’a été trouvé dans la sélection par le Concepteur de classes.This delay might also cause Class Designer to throw the error No types were found in the selection. Si vous obtenez une telle erreur, cliquez sur Annuler dans le message d’erreur et attendez que l’élément de code apparaisse dans l’Affichage de classes.If you receive an error such as this, click Cancel in the error message and wait for the code element to appear in Class View. Le Concepteur de classes devrait ensuite être en mesure d'afficher le type.After you do this, Class Designer should be able to display the type.

En cas d'échec de la mise à jour d'un diagramme de classes suite à la modification du code, il peut s'avérer nécessaire de fermer le diagramme, puis de le rouvrir.If a class diagram does not update with changes you have made in the code, you might need to close the diagram and open it again.

Problèmes de résolution de typeType Resolution Issues

Le Concepteur de classes peut ne pas être en mesure de résoudre des types pour les raisons suivantes :Class Designer might not be able to resolve types for the following reasons:

  • Le type se trouve dans un projet ou un assembly non référencé à partir du projet qui contient le diagramme de classes.The type is in a project or assembly that is not referenced from the project that contains the class diagram. Pour corriger cette erreur, ajoutez une référence au projet ou à l'assembly qui contient le type.To correct this error, add a reference to the project or assembly that contains the type. Pour plus d’informations, consultez Gestion des références dans un projet.For more information, see Managing references in a project.

  • Le type ne se trouve pas dans la portée correcte ; le Concepteur de classes ne peut donc pas le localiser.The type is not in the correct scope, so Class Designer cannot locate it. Vérifiez qu'il ne manque pas une instruction using, imports ou #include au code.Ensure that the code is not missing a using, imports, or #include statement. Assurez-vous également que vous n'avez pas déplacé le type (ou un type connexe) hors de l'espace de noms dans lequel il a été initialement localisé.Also make sure that you have not moved the type (or a related type) out of the namespace in which it was originally located.

  • Le type n'existe pas (ou a été commenté).The type does not exist (or has been commented out). Pour corriger cette erreur, assurez-vous que vous n'avez pas commenté ni supprimé le type.To correct this error, make sure that you have not commented out or deleted the type.

  • Le type se trouve dans une bibliothèque référencée par une directive #import.The type is located in a library referenced by an #import directive. Une solution de contournement possible consiste à ajouter manuellement le code généré (le fichier .tlh) à une directive #include dans le fichier d'en-tête.A possible workaround is to manually add the generated code (the .tlh file) to an #include directive into the header file.

L’erreur que vous allez probablement voir en cas de problème de résolution de type est la suivante : Code introuvable pour une ou plusieurs formes dans le diagramme de classes ’<élément>’.The error you are most likely to see for a type resolution issue is Code could not be found for one or more shapes in class diagram '<element>'. Ce message d'erreur n'indique pas nécessairement que votre code est erroné.This error message does not necessarily indicate that your code is in error. Il indique seulement que le Concepteur de classes n'a pas pu afficher votre code.It indicates only that class designer was unable to display your code. Essayez les actions suivantes.Try the following measures.

  • Assurez-vous que le type existe.Ensure that the type exists. Vérifiez que vous n'avez pas involontairement commenté ni supprimé le code source.Ensure that you have not unintentionally commented out or deleted the source code.

  • Assurez-vous que le Concepteur de classes prend en charge le type que vous avez entré.Ensure that Class Designer supports the type that you entered. Consultez Limitations pour les éléments de code C++.See Limitations for C++ Code Elements.

  • Essayez de résoudre le type.Try to resolve the type. Le type se trouve peut-être dans un projet ou un assembly non référencé à partir du projet qui contient le diagramme de classes.The type might be in a project or assembly that is not referenced from the project that contains the class diagram. Pour corriger cette erreur, ajoutez une référence au projet ou à l'assembly qui contient le type.To correct this error, add a reference to the project or assembly that contains the type. Pour plus d’informations, consultez Gestion des références dans un projet.For more information, see Managing references in a project.

  • Assurez-vous que le type se trouve dans la portée correcte afin que le Concepteur de classes puisse le localiser.Ensure that the type is in the correct scope so that Class Designer can locate it. Vérifiez qu'il ne manque pas une instruction using, imports ou #include au code.Make sure that the code is not missing a using, imports, or #include statement. Assurez-vous également que vous n'avez pas déplacé le type (ou un type connexe) hors de l'espace de noms dans lequel il a été initialement localisé.Also make sure that you have not moved the type (or a related type) out of the namespace in which it was originally located.

Résolution d'autres messages d'erreurTroubleshooting Other Error Messages

Vous pouvez trouver de l'aide sur la résolution des erreurs et des avertissements dans les forums publics Microsoft Developer Network (MSDN).You can find assistance with troubleshooting errors and warnings in the Microsoft Developer Network (MSDN) public forums. Consultez le Forum du Concepteur de classes Visual Studio.See the Visual Studio Class Designer Forum.

Limitations pour les éléments de code C++Limitations for C++ Code Elements

  • Quand un projet Visual C++ est chargé, le Concepteur de classes fonctionne en lecture seule.When a Visual C++ project is loaded, Class Designer functions in a read-only manner. Vous pouvez modifier le diagramme de classes, mais vous ne pouvez pas réenregistrer les modifications du diagramme de classes dans le code source.You can change the class diagram, but you cannot save changes from the class diagram back to the source code.

  • Le Concepteur de classes prend en charge uniquement la sémantique C++ native.Class Designer supports only native C++ semantics. Pour les projets Visual C++ compilés dans le code managé, le Concepteur de classes visualise seulement les éléments de code qui sont des types natifs.For Visual C++ projects that are compiled into managed code, Class Designer will only visualize code elements that are native types. Par conséquent, vous pouvez ajouter un diagramme de classes à un projet, mais le Concepteur de classes ne vous autorise pas à visualiser les éléments dans lesquels la propriété IsManaged a la valeur true (autrement dit, les types valeur et types référence).Therefore, you can add a class diagram to a project, but Class Designer will not allow you to visualize elements in which the IsManaged property is set to true (that is, value types and reference types).

  • Pour les projets Visual C++, le Concepteur de classes lit uniquement la définition du type.For Visual C++ projects, the Class Designer reads only the definition of the type. Par exemple, supposons que vous définissez un type dans un fichier d'en-tête (.h) et que vous définissez ses membres dans un fichier d'implémentation (.cpp).For example, assume that you define a type in a header (.h) file and define its members in an implementation (.cpp) file. Si vous appelez « Afficher le diagramme de classes » sur le fichier d'implémentation (.cpp), le Concepteur de classes n'affiche rien.If you invoke "View Class Diagram" on the implementation (.cpp) file, Class Designer displays nothing. Autre exemple, si vous appelez « Afficher le diagramme de classes » sur un fichier .cpp qui utilise une instruction #include pour inclure d'autres fichiers, mais qui ne contient pas de définitions de classe réelles, le Concepteur de classes n'affiche toujours rien.As another example, if you invoke "View Class Diagram" on a .cpp file that uses an #include statement to include other files but does not contain any actual class definitions, Class Designer again displays nothing.

  • Les fichiers IDL (.idl) qui définissent des interfaces COM et des bibliothèques de types ne s'affichent pas dans les diagrammes, sauf s'ils sont compilés en code C++ natif.IDL (.idl) files, which define COM interfaces and type libraries, do not display in diagrams unless they are compiled to native C++ code.

  • Le Concepteur de classes ne prend pas en charge les fonctions et variables globales.Class Designer does not support global functions and variables.

  • Le Concepteur de classes ne prend pas en charge les unions.Class Designer does not support unions. Il s'agit d'un type spécial de classe dans laquelle la mémoire allouée est uniquement suffisante pour la plus grande donnée membre de l'union.This is a special type of class in which the memory allocated is only the amount necessary for the union's largest data member.

  • Le Concepteur de classes n'affiche pas les types de données de base comme int et char.Class Designer does not display basic data types such as int and char.

  • Le Concepteur de classes n'affiche pas les types qui sont définis en dehors du projet actuel si le projet n'a pas de références correctes à ces types.Class Designer does not display types that are defined outside the current project if the project does not have correct references to those types.

  • Le Concepteur de classes peut afficher les types imbriqués, mais pas les relations entre un type imbriqué et d'autres types.Class Designer can display nested types but not the relationships between a nested type and other types.

  • Le Concepteur de classes ne peut pas afficher les types void ou dérivés d'un type void.Class Designer cannot display types that are void or that derive from a void type.

Voir aussiSee also

Conception et affichage des classes et des types Designing and Viewing Classes and Types
Utilisation des diagrammes de classes Working with Class Diagrams
Conception des classes et des types Designing Classes and Types
Informations supplémentaires sur les erreurs du Concepteur de classes Additional Information About Class Designer Errors
Classes de Visual C++ dans le concepteur de classes Visual C++ Classes in Class Designer
Structures de Visual C++ dans le Concepteur de classes Visual C++ Structures in Class Designer
Énumérations de Visual C++ dans le concepteur de classes Visual C++ Enumerations in Class Designer
Typedefs de Visual C++ dans le Concepteur de classesVisual C++ Typedefs in Class Designer