Nous sommes actuellement le 10 Juil 2026, 17:20

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 7 message(s) ] 
Auteur Message
 Sujet du message: C++ .NET
MessagePublié: 15 Juin 2005, 11:02 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 11:08
Message(s) : 575
Voici mon problème j'ai une class:

Code :
// Form1.h
#include "control.h"
public __gc class Form1 : public System::Windows::Forms::Form
{
...
  controle *myControl;
}



et j'ai une deuxième class:

Code :
// Controle.h
#include "Form1.h"
__gc public class Controle :  public System::ComponentModel::Component
{
...
   Form1 *myForm;
}



La class Form1 est la class parent alors que la class Controle est la class Child. Donc à partir de la class Form1 je crée la class Controle. Je dois avoir accès au function de Form1 à partir de Child. J'ai donc crée un constructeur dans Controle:

Code :
Controle(Form1 *inForm)
{
   myForm = inForm;
}


Et dans Form1 je crée l'objet Controle:
Code :
myControl = new Controle(this);


Malheureusement, ça ne compile pas...
Citer:
Form1.h(54): error C2143: syntax error : missing ';' before '*'

La ligne 54 est la ligne controle *myControl[];


Une solution ?


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 15 Juin 2005, 16:23 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 27 Juin 2002, 21:39
Message(s) : 880
Controle *myControl;


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 15 Juin 2005, 21:44 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 11:08
Message(s) : 575
C'est une erreur que j'ai fait sur le forum... mais dans mon code il y a bien une majuscule.


Je pense que mon problème est parce que j'inclus deux fichiers entre eux ce qui cause une boucle.

Mais comment éviter ce problème ??


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 16 Juin 2005, 08:46 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Sicaire a écrit:
Je pense que mon problème est parce que j'inclus deux fichiers entre eux ce qui cause une boucle.


Effectivement, c'est votre problème et c'est très simple à modifier pour que ça fonctionne.

Par exemple:

Code :
// a.h
class B;
class A
{
   B* pB;
   ...
};

// a.cpp
#include "a.h"
#include "b.h"

// b.h
class A;
class B
{
   A* pA;
   ...
};

// b.cpp
#include "a.h"
#include "b.h"


C'est l'instruction class B; dans le fichier a.h et class A; dans le fichier b.h qui permet de réglé votre problème. Ces instructions informe le compilateur que la class n'est pas encore connu, mais qu'elle sera définie plus tard.

Alors, lorsque que A est compiler il ne connait pas B, mais il sait qu'il ne doit pas générer d'erreur car B sera définie plus tard. J'espère que c'est pas trop compliqué mon affaire ?!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 16 Juin 2005, 13:03 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 11:08
Message(s) : 575
Je viens d'essayer mais malheureusement ça ne fonctionne pas... je ne sais pas si c'est le code "managed" qui fait ça dans C++ .NET

Voici mom fichier class Form1.h
Code :
#pragma once




namespace test
{
   using namespace System;
   using namespace System::ComponentModel;
   using namespace System::Collections;
   using namespace System::Windows::Forms;
   using namespace System::Data;
   using namespace System::Drawing;


public __gc class controle;
   /// <summary>
   /// Summary for Form1
   ///
   /// WARNING: If you change the name of this class, you will need to change the
   ///          'Resource File Name' property for the managed resource compiler tool
   ///          associated with all .resx files this class depends on.  Otherwise,
   ///          the designers will not be able to interact properly with localized
   ///          resources associated with this form.
   /// </summary>
public __gc class Form1 : public System::Windows::Forms::Form
{   
public:
   Form1(void)
   {
      InitializeComponent();
      //unControle = new controle();

   }

protected:
   void Dispose(Boolean disposing)
   {
      if (disposing && components)
      {
         components->Dispose();
      }
      __super::Dispose(disposing);
   }

private:
   /// <summary>
   /// Required designer variable.
   /// </summary>
   System::ComponentModel::Container * components;
private: System::Windows::Forms::CheckBox *  checkBox1;
       controle *unControle;


       /// <summary>
       /// Required method for Designer support - do not modify
       /// the contents of this method with the code editor.
       /// </summary>
       void InitializeComponent(void)
       {
          this->checkBox1 = new System::Windows::Forms::CheckBox();
          this->SuspendLayout();
          //
          // checkBox1
          //
          this->checkBox1->Location = System::Drawing::Point(176, 176);
          this->checkBox1->Name = S"checkBox1";
          this->checkBox1->TabIndex = 0;
          this->checkBox1->Text = S"checkBox1";
          //
          // Form1
          //
          this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
          this->ClientSize = System::Drawing::Size(292, 266);
          this->Controls->Add(this->checkBox1);
          this->Name = S"Form1";
          this->Text = S"Form1";
          this->Load += new System::EventHandler(this, Form1_Load);
          this->ResumeLayout(false);

       }   
private: System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)
       {

          unControle = new controle(this);
          //this->Controls->Add(unControle->textBox1);
          //unControle->textBox1->Text = "test";
       }

};
}



et ma class controle.h
Code :
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;



public __gc class Form1;
namespace test
{
   /// <summary>
   /// Summary for controle
   /// </summary>

public __gc class controle :  public System::ComponentModel::Component
{
public:
   controle(Form1 *inForm)
   {
      lForm = inForm;
      InitializeComponent();

   }
   controle(System::ComponentModel::IContainer *container) : components(0)
   {
      /// <summary>
      /// Required for Windows.Forms Class Composition Designer support
      /// </summary>

      container->Add(this);
      InitializeComponent();
   }

protected:
   void Dispose(Boolean disposing)
   {
      if (disposing && components)
      {
         components->Dispose();
      }
      __super::Dispose(disposing);
   }
public: System::Windows::Forms::TextBox *  textBox1;


private:
   /// <summary>
   /// Required designer variable.
   /// </summary>
   System::ComponentModel::Container *components;
   Form1 *lForm;

   /// <summary>
   /// Required method for Designer support - do not modify
   /// the contents of this method with the code editor.
   /// </summary>      
   void InitializeComponent(void)
   {
      this->textBox1 = new System::Windows::Forms::TextBox();
      //
      // textBox1
      //
      this->textBox1->Location = System::Drawing::Point(17, 17);
      this->textBox1->Name = S"textBox1";
      this->textBox1->TabIndex = 0;
      this->textBox1->Text = S"textBox1";

   }
};
}


Avec ce code j'obtiens une erreeur de compilation:
Form1.h(85): error C2512: 'test::controle' : no appropriate default constructor available

unControle = new controle(this);

Merci,


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 20 Juin 2005, 10:15 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Je peux vous envoyer un projet C++.NET 2003 qui fonctionne en MP. J'ai fait ce que je vous ai dit et ça fonctionne.

Avez-vous essayé d'ajouter une fonction ?

Code :
...

void SetParent(Form1* f)
{
   this->pForm1 = f;
}

...
MonControl = new MonControl();
MonControl->SetParent(this);


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 20 Juin 2005, 22:12 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 11:08
Message(s) : 575
Finalement j'ai réussi à règler mon problème...

Lorsque l'on crée un projet en C++ .NET par défaut tout le code est dans le fichier (header) *.h lorsque je l'ai transféré dans le *.cpp j'ai oublié de taper:

Code :
using namespace test;


:roll:

ça fonctionne bien maintenant merci beaucoup !


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 7 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site