Bonjour tout le monde,
Un peu nouveau dans le monde du C++/CLI, je rencontre beaucoup de difficulté à déclarer une enum managé, et plus précisément où effectuer cette déclaration dans mon code.
Pour le moment, je déclarais mes enum dans mon fichier .h, plus précisément à l'intérieur de ma classe managé. Soit :
Hors en reprenant un ancien projet d'un autre développeur, je ne suis pas capable de reproduire ce type de déclaration au même emplacement. Lorsque je passe ensuite à l'affichage de l'interface dans le designer, mon Visual Studio 2003 plante et je suis obligé de terminer l'application. Ensuite impossible de ré ouvrir le projet tant que je n'ai pas commenté ou supprimé cette enum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #pragma once namespace MyNameSpace {<div style="margin-left:40px">using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; __gc class MyClass { public:<div style="margin-left:40px">__value enum MyEnum { VAL1, VAL2, VAL3 }; MyClass(void) {<div style="margin-left:40px">InitializeComponent();</div>}</div>protected:<div style="margin-left:40px">void Dispose(Boolean disposing) {<div style="margin-left:40px">if (disposing && components) {<div style="margin-left:40px">components->Dispose();</div>}</div></div>private:<div style="margin-left:40px">System::ComponentModel::Container * components; void InitializeComponent(void) { <div style="margin-left:40px">// Code supprimé ici</div>}</div>};</div>}
J'ai refait mes essais avec un projet vierge, aucun problème pour placer la déclaration de l'énum avec les membres public de ma classe. Ensuite retour dans le code du projet que j'ai récupéré et rebelote pour les crashs de Visual Studio.
La solution que j'ai trouvé est de déclarer mon enum en dehors de ma classe, directement dans le namespace. A ce moment là, je n'ai plus de crash du designer de Visual Studio et à l'exécution tout à l'air de bien se passer...
Quelqu'un pourrait t-il éclairer ma lanterne car j'ai horreur de faire quelque chose que je ne comprends pas ... enfin en même temps cela provient surement de mon niveau pitoyable en programmation ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #pragma once namespace MyNameSpace {<div style="margin-left:40px">using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; __value enum MyEnum { VAL1, VAL2, VAL3 }; __gc class MyClass { public:<div style="margin-left:40px">MyClass(void) {<div style="margin-left:40px">InitializeComponent();</div>}</div>protected:<div style="margin-left:40px">void Dispose(Boolean disposing) {<div style="margin-left:40px">if (disposing && components) {<div style="margin-left:40px">components->Dispose();</div>}</div></div>private:<div style="margin-left:40px">System::ComponentModel::Container * components; void InitializeComponent(void) { <div style="margin-left:40px">// Code supprimé ici</div>}</div>};</div>}
Où doit-on déclarer une enum dans une Winform en C++ pour que le code soit propre ???
Merci d'avance![]()
Partager