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

Visual C++ Discussion :

D�claration et initialisation d'une variable


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par d�faut D�claration et initialisation d'une variable
    Je fabrique un petit programme avec Visual Studio 2010. Ce programme comporte 3 fen�tres, form1, forrm2 ... Chaque fen�tre poss�de divers contr�les et fonctions qui doivent avoir acc�s � une variable tableau de 10 entiers ( int var[10] ).
    O�, dans mon programme, et de quelle fa�on dois je d�clarer et initialiser cette variable pour en avoir acc�s depuis mes 3 fen�tre ?
    Merci de votre r�ponse .

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tes fen�tres sont-elles �gales, ou y en a-t-il une "ma�tre"?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par d�faut R�ponse � M�dinoc
    Citation Envoy� par M�dinoc Voir le message
    Tes fen�tres sont-elles �gales, ou y en a-t-il une "ma�tre"?
    Voici ma fonction main :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(array<System::String ^> ^args)
    {
    	// Activation des effets visuels de Windows*XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    	// Créer la fenêtre principale et l'exécuter
    	Application::Run(gcnew Form1());
    	Application::Run(gcnew Form2());
            Application::Run(gcnew Form3());
    	return 0;
    }
    La form1 est une fen�tre de pr�sentation. Elle se ferme au bout de 3s � laide d'un timer et methose Close.
    La form2 est en fait ma fen�tre principale. Elle comporte une barre de menu, un pictureBox et plusieurs boutons.
    Voici par exemple le code d'un menu :
    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
    private: System::Void distributionAléatoitreToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
    {
        int donne[10],i;
        for (i = 0; i < 52; i++)
        donne[i]= i+1;
         Melangetableau(donne,10);
          this->pictureBox1->Refresh();
         //Affiche la carte "Dos".
          Image^ Image = Image::FromFile("./Cartes/Dos.jpg" );
          Graphics^ g = this->pictureBox1->CreateGraphics();
           g->DrawImage(Image,457,20,100,150);
           g->DrawImage(Image,457,597,100,150);			
            Image->RotateFlip( RotateFlipType::Rotate90FlipNone );
           g->DrawImage(Image,20,333,150,100);
           g->DrawImage(Image,847,333,150,100);
           delete g;
    }
    A partir des boutons, je voudrais avoir acc�s au tableau " int donne[10]" et inscrire par exemple le code dans la partie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    La fen�tre form3 est pour le moment une fen�tre "fille" de form2. ( mais envisager aussi le cas o� form3 serait ind�pendante de form2 )
    A partir de form3, je voudrais aussi avoir acc�s au tableau "int donne[10].
    Merci de votre r�ponse. ( je ne suis pas expert en C++ et truc.net, mais j'ai pratiqu� le fortran et le C il y a quelques ann�es )

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le plus simple: Tu le cr�es dans le main() et tu le passes dans les constructeurs de tes classes de forms.
    Et de pr�f�rence, utilise un tableau .Net:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(array<System::String ^> ^args)
    {
    	// Activation des effets visuels de Windows*XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
     
    	// Créer la fenêtre principale et l'exécuter
    	array<int>^ tableau = gcnew array<int>(10);
    	Application::Run(gcnew Form1(tableau));
    	Application::Run(gcnew Form2(tableau));
            Application::Run(gcnew Form3(tableau));
    	return 0;
    }

    PS: Si Form3 est cens�e �tre une fen�tre "fille" de Form2, alors la ligne Application::Run(gcnew Form3(tableau)); n'a rien � faire ici.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par d�faut
    OK, merci pour cette r�ponse Medinoc.
    Je vais essayer et te tiendrai au courant.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par d�faut
    [QUOTE=M�dinoc;7786081]Le plus simple: Tu le cr�es dans le main() et tu le passes dans les constructeurs de tes classes de forms.
    Et de pr�f�rence, utilise un tableau .Net:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(array<System::String ^> ^args)
    {
    	// Activation des effets visuels de Windows*XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
     
    	// Créer la fenêtre principale et l'exécuter
    	array<int>^ tableau = gcnew array<int>(10);
    	Application::Run(gcnew Form1(tableau));
    	Application::Run(gcnew Form2(tableau));
            Application::Run(gcnew Form3(tableau));
    	return 0;
    }

    Bonjour,Medinoc
    J' essay� ce que tu m'as propos�. ( mon tableau s'appelle "donne")
    Dans ma fonction main :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main(array<System::String ^> ^args)
    {	
    	// Activation des effets visuels de Windows XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
     
    	array<int>^ donne = gcnew array<int>(10);
    	// Créer la fenêtre principale et l'exécuter
    	Application::Run(gcnew Form1());
    	Application::Run(gcnew Form2(donne));
    	return 0;
    }
    Dans le fichier form2.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    private: System::Void distributionAléatoitreToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
    {
    int i;
    	array<System::Int32 ^> ^donne;
    	for (i = 0; i < 10; i++)
                      donne[i]= i+1;
                      Melangetableau(donne,10);
    }
    H�las, deux messages d'erreurs lors de la g�n�ration de la solution.

    1>------ D�but de la r�g�n�ration globale*: Projet*: Jeu, Configuration*: Debug Win32 ------
    1> stdafx.cpp
    1> AssemblyInfo.cpp
    1> Jeu.cpp
    1>d:\projets\projects\jeu\jeu\Form2.h(285): error C2664: 'Melangetableau'*: impossible de convertir le param�tre 1 de 'cli::array<Type> ^' en 'int []'
    1> with
    1> [
    1> Type=System::Int32 ^
    1> ]
    1>Jeu.cpp(23): error C3673: 'Jeu::Form2'*: la classe n'a pas de constructeur de copie
    La ligne 23 du fichier Jeu.cpp est : Application::Run(gcnew Form2(donne));

    Je comprends la premi�re erreur. J' ai effectivement plusieurs fonctions �crites en C et situ�es dans un autre fichier.( Melangetableau est l'une d'entre elles )
    La deuxi�me erreur est plus obscur pour moi !

    Par contre j' ai essay� autre chose :
    D�claration globale et initialisation de "donne" avant la fonction main dans la fichier Jeu.cpp ( le fichier de la fonction main)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int donne[10]={1,2,3,4,5,6,7,8,9,10}
    Dans le fichier form2.h, d�claration dans le code de mes boutons de "donne" en utilisant la classe extern.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    private: System::Void distributionAléatoitreToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
    {
          int i;
          extern int donne[10];
          for (i = 0; i < 10; i++)
               donne[i]= i+1;
          Melangetableau(donne,10);
    }
    Cela fonctionne, ce qui me convient. ( j' ai acc�s � mon tableau et pas d'erreur avec la fonction Melangetableau )
    Merci de ton aide.
    ( �ventuellement un petit mot pour m'�clairer sur la deuxi�me erreur )

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Une variable globale, en 2014

    Ton probl�me, c'est que tu n'utilises pas un tableau .Net sur toute la ligne. Fais-le.
    Et quand tu ne peux pas modifier le code pour une fonction, passe-lui un pin_ptr<int> vers le d�but du tableau � la place:
    Code C++/CLI : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    {
    	pin_ptr<int> pinDonne(&donne[0]);
    	Melangetableau(pinDonne,10);
    }
    Et si tu ne peux VRAIMENT pas utiliser un tableau .Net, alors utilise un tableau normal, que tu passes �galement par pointeur. Tout, sauf une variable globale.

    Au pire, � l'extr�me pire, si tu n'as pas d'autre solution, m�me une variable statique dans une classe est moins horrible que �a.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [VB.Net]D�claration et initialisation d'une variable
    Par DonF dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 14/11/2006, 20h05
  2. Initialisation d'une variable Object
    Par bobic dans le forum Langage
    R�ponses: 2
    Dernier message: 08/09/2006, 17h21
  3. V�rifier l'initialisation d'une variable
    Par homeostasie dans le forum C
    R�ponses: 11
    Dernier message: 04/08/2006, 18h05
  4. initialisation d'une variable DATE
    Par olivll dans le forum Access
    R�ponses: 4
    Dernier message: 25/07/2006, 11h57
  5. d�claration et initialisation d'une matrice
    Par G�bix dans le forum C++
    R�ponses: 5
    Dernier message: 16/02/2006, 01h22

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