IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

Vs C++ 2005 Express - Cration de Variables globales


Sujet :

VC++ .NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Vs C++ 2005 Express - Cration de Variables globales
    Ave à tous,

    Ce message sera peut-être long pour certains, qu'ils m'en excusent d'avance.

    A cause de l'absence de possibilité graphique du logiciel de gestion de banque de données (WinDev pour ne pas le citer) je dois développer des modules (Dll) pour palier cette absence. Ne désirant pas investir (pour le moment du moins) dans l'acquisition d'une version complète d'un logiciel de développement, le Visual Studio C++ 2005 Express étant gratuite, mon choix ne m'a pas été dificile et j'espère avoir fait le bon. ...

    Je n'ai pas eu trop de difficultés avec les différents exemples que le VC++2005 Express donnent mais dès que l'on commence à écrire son propre code ... les difficultés commencent.

    Débutant en C++2005 Express mais pas en programmation, j'ai créé une classe (VarGlob qui devrait contenir toutes les variables nécessaire aux modules à écrire) dans le projet (Nav00 qui contien actuellement une Winform et les barres de Menus/Menustrip, Boutons/Toolstrip Cases à cocher/FlowLayoutPanel barre de Message/Statustrip) et voilà les erreurs que je reçois après avoir inclus les lignes de code reprises à l'adresse

    http://dotnet.developpez.com/faq/cpp...ariableGlobale

    le code :

    #pragma once

    public ref class VarGlob
    {
    public:
    VarGlob(void);
    private:
    static String ^ChainCaract;
    public:
    static property String ^ChainCaract
    {
    String^ get()
    {
    return ChainCaract;
    }
    void set(String^ value)
    {
    ChainCaract = value;
    }
    }
    };


    Je me doute qu'il y a des erreurs de redondance du fait de l'absence de ";".

    Merci de bien vouloir m'aider.

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    t'as du oublier de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using namespace System;
    note aussi que tu peux pas appeler ta propriété de la meme facon que ta variable privée, en général, la convention classique c'est de rajouter un _
    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
     
    private:
    	static String ^_chainCaract;
    public:
    	static property String ^ChainCaract
    	{
    		String^ get()
    		{
    			return ChainCaract;
    		}
    		void set(String^ value)
    		{
    			ChainCaract = value;
    		}
    	}

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Variables Globales.
    Merci Nico pour ta réponse.

    Je vais lire ce qu'entraîne le "_" devant le nom d'une variable.

    Je dois donc si j'ai bien compris :
    1) ajouter la ligne "using namespace System;" dans la class "VarGlob" entre "#pragma once" et la ligne "public ref classe VarGlob"
    2) ajouter un "_" devant le nom de la variable spécifié dans la ligne "private etc.."

    Question subsidiaire:
    Doit-on obligatoirement introduire les 14 lignes de code (depuis la ligne private: jusque et y compris la ligne "}" avant celle "};" pour définir chaque variable globale texte que l'on désire utiliser ?

    Permet-moi de te demander ton avis. Ai-je été bien inspirer de vouloir utiliser VC++2005 Express pour développer l'un ou l'autre module (Dll) que j'aurais besoin dans un autre outil de développement (WinDev 11 pour ne pas le citer). Windev est "court" dans ces fonctions graphiques.

    Les modules que je désire développer sont expliqués dans deux discussions que j'ai ouverte le 10/07 dernier. Si tu veux bien les lire et me donner ton avis.

    Voilà j'ai ajouté les changements, OK pour la compil.

    J'ajoute dans un "_MouseEnter" du Form1.h de Nav00 (mon projet) la ligne d'appel :

    VarGlob::ChainCaract = "Affiche/Désaffiche les ...";

    et je reçois 2 erreurs :
    Erreur 1 error C2653: 'VarGlob'*: n'est pas un nom de classe ni d'espace de noms f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 482
    Erreur 2 error C2065: 'ChainCaract'*: identificateur non déclaré f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 482

    Pourquoi le compilateur ne prend pas en compte le nom de la classe ni d'espace de nom "VarGlob" alors que je l'ai créée via la procédure "Clic droit sur le nom de mon projet dans la fenêtre Affichage des classes, puis Ajouter et selection de Classe ?
    De même pourquoi 'ChainCaract' est considéré comme un identificateur non déclaré ?

    Merci de ta réponse.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    alors, je suis pas trop là ...
    tu as créé une assembly et tu veux l'utiliser depuis un projet windev, c'est ca ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut
    Bonsoir Nico,

    Je réponds à ton message du 13 à 13h36 sans savoir si tu as déjà lu mon mail du 12 à 15h08.

    Le pourquoi je débute en VC++ 2005 Express, c'est effectivement pour écrire des "modules" (des Dll...) de routines graphiques en VC++2005 Express qui comblent le manque de puissance en fonctions graphiques de WinDev et que j'appellerai en Windev.

    Ces modules ne sont pas encore développés actuellement mais j'espère y parvenir sans savoir si le VC++2005 Express me permettra d'y arriver et c'est pour cela que dans un de mes mails je te demande ton avis par rapport aux autres outils de développement Visual Studio (C, C# et Basic).

    Merci de ta réponse.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Alors perso, de windev j'en connais que ce que j'ai vu à l'école, c'est à dire quasiment rien
    Tu aurais plutot interet à demander à des gens qui s'y connaissent en Windev.

    Après, niveau intérropérabilité, si windev sait gerer la CLR, et bien tu as tout à fait interer à développer des assemblys.
    Au pire, il faudra à mon avis faire du natif, mais je ne sais pas comment ca s'intègre à Windev.

    Pose peut-etre la question dans le forum windev http://www.developpez.net/forums/forumdisplay.php?f=226

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Variables Globales.
    Bonsoir Nico,

    J'avais déjà, en son temps, contacté le Support de WinDev et il m'a répondu que via des DLLs cela doit être possible.

    Je reviens à mon mail du 12 dernier. Pourrais-tu me confirmer ou m'infirmer la question subsidiaire et me donner ton avis sur le dernier paragraphe du dit mail.

    D'avance un grand merci.

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    euh ... pouvez répeter la question ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut
    Bonjour Nico,

    Ton mail du 10/07 23h24 me répondais :

    t'as du oublier de faire un

    Code :

    using namespace System;note aussi que tu peux pas appeler ta propriété de la meme facon que ta variable privée, en général, la convention classique c'est de rajouter un _

    Code :

    private:
    static String ^_chainCaract;
    public:
    static property String ^ChainCaract
    {
    String^ get()
    {
    return ChainCaract;
    }
    void set(String^ value)
    {
    ChainCaract = value;
    }
    }__________________njour Nico,


    Je reproduis mon mail du 12/07 15h08

    Merci Nico pour ta réponse.

    Je vais lire ce qu'entraîne le "_" devant le nom d'une variable.

    Je dois donc si j'ai bien compris :
    1) ajouter la ligne "using namespace System;" dans la class "VarGlob" entre "#pragma once" et la ligne "public ref classe VarGlob"
    2) ajouter un "_" devant le nom de la variable spécifié dans la ligne "private etc.."

    Question subsidiaire:
    Doit-on obligatoirement introduire les 14 lignes de code (depuis la ligne private: jusque et y compris la ligne "}" avant celle "};" pour définir chaque variable globale texte que l'on désire utiliser ?

    Permet-moi de te demander ton avis. Ai-je été bien inspirer de vouloir utiliser VC++2005 Express pour développer l'un ou l'autre module (Dll) que j'aurais besoin dans un autre outil de développement (WinDev 11 pour ne pas le citer). Windev est "court" dans ces fonctions graphiques.

    Les modules que je désire développer sont expliqués dans deux discussions que j'ai ouverte le 10/07 dernier. Si tu veux bien les lire et me donner ton avis.

    Voilà j'ai ajouté les changements, OK pour la compil.

    J'ajoute dans un "_MouseEnter" du Form1.h de Nav00 (mon projet) la ligne d'appel :

    VarGlob::ChainCaract = "Affiche/Désaffiche les ...";

    et je reçois 2 erreurs :
    Erreur 1 error C2653: 'VarGlob'*: n'est pas un nom de classe ni d'espace de noms f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 482
    Erreur 2 error C2065: 'ChainCaract'*: identificateur non déclaré f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 482

    Pourquoi le compilateur ne prend pas en compte le nom de la classe ni d'espace de nom "VarGlob" alors que je l'ai créée via la procédure "Clic droit sur le nom de mon projet dans la fenêtre Affichage des classes, puis Ajouter et selection de Classe ?
    De même pourquoi 'ChainCaract' est considéré comme un identificateur non déclaré ?

    Merci de ta réponse.


    J'ai repris le contenu des deux mails par copier/coler, mais comment fait-on pour inclure une réponse déja faite dans un mail antérieur ?

    Merci de ta réponse.

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    faudrait que tu montres ton code, il ne devrait pas y avoir de * la dedans

    mais VC++ express est tout à fait adaptée pour faire des modules complémentaires CLR

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Variables Globales.
    Bonsoir Nico,

    Comme demandé je joinds la classe VarGlob et les lignes de programme qui provoquent les erreurs.

    VarGlob.h conyient les 19 lignes suivantes :

    #pragma once

    using namespace System;

    public ref class VarGlob {
    public: VarGlob(void);

    private: static String ^_ChainCaract;

    public: static property String ^ChainCaract {
    String^ get() { return ChainCaract;
    }
    void set(String^ value)
    {
    ChainCaract = value;
    }
    }
    };


    et les deux lignes (509 et 510) qui provoquent les erreurs :

    private: System::Void CheckULM_MouseEnter(System::Object^ sender, System::EventArgs^ e) {
    VarGlob::_ChainCaract = "Affiche/Désaffiche les ...";
    Nav00::Form1::AffichInfos = VarGlob::ChainCaract;
    }


    Les 8 erreurs: (Je ne comprends pas pourquoi les erreurs que j'ai copiées/collées dans mon mail contiennent une étoile "*" après le nom de la classe et de la variable alors que les erreurs ci-dessous ne contiennent pas d'étoiles... bizare).

    Erreur 1 error C2653: 'VarGlob' : n'est pas un nom de classe ni d'espace de noms f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 509
    Erreur 2 error C2065: '_ChainCaract' : identificateur non déclaré f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 509
    Erreur 3 error C2653: 'VarGlob' : n'est pas un nom de classe ni d'espace de noms f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 510
    Erreur 4 error C2065: 'ChainCaract' : identificateur non déclaré f:\Mes Projets\C++Expres5\Début C++\Essais\Nav00\Nav00\Form1.h 510
    Erreur 5 error C2653: 'VarGlob' : n'est pas un nom de classe ni d'espace de noms f:\mes projets\c++expres5\début c++\essais\nav00\nav00\Form1.h 509
    Erreur 6 error C2065: '_ChainCaract' : identificateur non déclaré f:\mes projets\c++expres5\début c++\essais\nav00\nav00\Form1.h 509
    Erreur 7 error C2653: 'VarGlob' : n'est pas un nom de classe ni d'espace de noms f:\mes projets\c++expres5\début c++\essais\nav00\nav00\Form1.h 510
    Erreur 8 error C2065: 'ChainCaract' : identificateur non déclaré f:\mes projets\c++expres5\début c++\essais\nav00\nav00\Form1.h 510


    Petites sous-question ?

    Je finis par m'y perdre. Quel est le nom de la variable, "_ChainCaract" ou "ChainCaract", que je dois utiliser dans le programme pour pouvoir utiliser la variable ?

    Pourquoi le compilateur dénère DEUX fois les message d'erreurs (deux messages par ligne erronnée je comprends mais deux fois les messages non ?

    Peux-tu me l'expliquer.

    Question subsidiaire :

    Faut-il, pour chaque variable globale que l'on désire définir, créer chaque fois ces même lignes dans la classe ou alors peux-tu me dire quelles sont les lignes que je dois ajouter si je veux créer les variables chaînes (ou autres int) Chaine01, Chaine02, Chaine03, ..., par exemple.

    Merci de ta réponse.

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    nonon, _ChainCaract est une variable privée, c'est elle qui contient la valeur
    ChainCaract est la propriété publique, c'est elle qui doit etre accedée

    Je me rends compte que j'ai marqué n'importe quoi au début

    ca doit ressembler à ca :

    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
    using namespace System;
     
    public ref class VarGlob 
    {
    private: 
        static String ^_chainCaract;
        VarGlob(void);
    public: 
        static property String ^ChainCaract 
        {
            String^ get() { return _chainCaract;}
            void set(String^ value)
            {
                 _chainCaract = value;
            }
         }
    };
    et ensuite, tu y accèdes par la propriété publique depuis l'extérieur

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 27
    Points : 13
    Points
    13
    Par défaut Variables Globales.
    Bonsoir Nico,

    Toujour sur le même problème de variable que je désire ajouter dans la classe VarGlob :

    using namespace System;

    public ref class VarGlob
    {
    private:
    static String ^_chainCaract;
    VarGlob(void);
    public:
    static property String ^ChainCaract
    {
    String^ get() { return _chainCaract;}
    void set(String^ value)
    {
    _chainCaract = value;
    }
    }
    };


    Dans cette classe, faut-il, pour chaque variable globale que l'on désire ajouter et définir, créer chaque fois ces même lignes ou alors peux-tu me dire quelles sont les lignes que je dois ajouter si je veux créer les 4 variables globales Chaine01, NombreEntier02, NombreDouble03, OuiNonBooléen04, ..., par exemple.

    Merci de ta réponse.

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    oui, il faut :
    - une variable membre privée qui stocke la valeur, pour la changer ou la récuperer
    - une propriété publique pour y accéder en lecture (get et qui va consulter la variable membre privée) ou en écrire (set et qui va mettre à jour la variable membre privée)

Discussions similaires

  1. SSIS 2005 ACCES VARIABLE GLOBALE
    Par mesanges074 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 02/10/2007, 14h56
  2. Création d'état avec SQL Server 2005 Express
    Par Holmay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/04/2007, 21h07
  3. Création de dll en visual basic 2005 Express
    Par CodeBleu dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/04/2007, 08h44
  4. [C#][Débutant]Création d'add-in pour MVS 2005 Express ?
    Par Laurent Dardenne dans le forum C#
    Réponses: 5
    Dernier message: 12/04/2006, 11h23
  5. [C# VS .Net 2005] Variable globale
    Par jpminiscloux dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/11/2005, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo