[C++] Problème int

Bonjour à tous.

Je rencontre actuellement un problème avec un "int".

Voici le code source de cet "int" :
int MyFrame::OnSelectionner_les_zones_a_analyser::GetValue()

L'erreur est la suivante : `class MyFrame::OnSelectionner_les_zones_a_analyser' is not a class or namespace.

J'ai d'abord pensé à une erreur de déclaration, mais non de ce côté là tout est correct.

Quelqu'un aurait-il une idée pour remédier à cet erreur ?

Merci pour toutes réponses postées
--
Venez visiter le site de WORLD-TOUTINFO ainsi que le site officiel de la team BFV avec son porjet d

7 réponses

  1. peut on voir les prototypes des méthodes :
    OnSelectionner_les_zones_a_analyser() ?
    GetValue() ?
    0
    1. Oki, alors voilà ce que tu demandes, peut-être en ai-je mis trop mais bon :

      class MyFrame : public wxFrame
      {
      public:
      MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size,
      long style = wxDEFAULT_FRAME_STYLE);
      void OnAnalyser(wxCommandEvent& event);
      void OnZone_de_quarantaine(wxCommandEvent& event);
      void OnJournal(wxCommandEvent& event);
      void OnSelectionner_les_zones_a_analyser(wxCommandEvent& event);
      void OnMise_a_jour(wxCommandEvent& event);
      void OnAide(wxCommandEvent& event);
      void OnQuitter(wxCommandEvent& event);
      void OnChiffre(wxCommandEvent& event);

      private:
      int Chiffre; //mémorise le chiffre sélectionné
      wxStaticText *Label;
      DECLARE_EVENT_TABLE()
      };

      enum
      {
      Minimal_Analyser = 1,
      Minimal_Zone_de_quarantaine = 2,
      Minimal_Journal = 3,
      Minimal_Selectionner_les_zones_a_analyser = 4,
      Minimal_Mise_a_jour = 5,
      Minimal_Aide = 6,
      Minimal_Quitter = 7,
      Minimal_Chiffre = 8,
      };

      class MyDialog : public wxDialog
      {
      public:
      MyDialog(wxWindow* parent, wxWindowID id, const wxString& title, int nb = 0);
      int GetValue();
      void SetValue(int);
      private:
      wxRadioButton *RadioBouton1;
      wxRadioButton *RadioBouton2;
      wxRadioButton *RadioBouton3;
      };

      .........
      .........

      void MyFrame::OnSelectionner_les_zones_a_analyser(wxCommandEvent& WXUNUSED(event))
      {
      MyDialog Selectionner_les_zones_a_analyser(NULL,8,"Titre",Chiffre);
      if ( Selectionner_les_zones_a_analyser.ShowModal() == wxID_OK )
      {
      wxString st = "Aucun";
      Chiffre = Selectionner_les_zones_a_analyser.GetValue();
      switch(Chiffre)
      {
      case 1 : st = "Un";
      break;
      case 2 : st = "Deux";
      break;
      case 3 : st = "Trois";
      break;
      }
      Label->SetLabel("N° Sélectionné : " + st);
      }
      }

      MyDialog::MyDialog(wxWindow* parent, wxWindowID id, const wxString& titre, int nb)
      : wxDialog(parent,id,titre,wxDefaultPosition,wxSize(240, 200))
      {
      RadioBouton1 = new wxRadioButton(this,-1,"Un");
      RadioBouton2 = new wxRadioButton(this,-1,"Deux");
      RadioBouton3 = new wxRadioButton(this,-1,"Trois");
      wxButton *MonBouton1 = new wxButton(this,wxID_OK,"Ok");
      wxButton *MonBouton2 = new wxButton(this,wxID_CANCEL,"Annuler");

      wxBoxSizer *sizer1 = new wxBoxSizer( wxVERTICAL );
      sizer1->Add(-1,25);
      sizer1->Add(RadioBouton1,0,wxALL,5);
      sizer1->Add(RadioBouton2,0,wxALL,5);
      sizer1->Add(RadioBouton3,0,wxALL,5);

      wxBoxSizer *sizer2 = new wxBoxSizer( wxHORIZONTAL );
      sizer2->Add(MonBouton1,0,wxBOTTOM | wxLEFT | wxRIGHT ,5);
      sizer2->Add(MonBouton2,0,wxBOTTOM | wxLEFT | wxRIGHT ,5);

      wxBoxSizer *Psizer = new wxBoxSizer( wxVERTICAL );
      Psizer->Add(sizer1,3,wxALIGN_CENTER);
      Psizer->Add(sizer2,1,wxALIGN_CENTER);
      SetSizer(Psizer);
      SetValue(nb);
      }

      int MyFrame::OnSelectionner_les_zones_a_analyser::GetValue() //ça coince à partir de là
      {
      int x = 0;
      if( RadioBouton1->GetValue() ) x = 1;
      if( RadioBouton2->GetValue() ) x = 2;
      if( RadioBouton3->GetValue() ) x = 3;
      return x;
      }

      void MyFrame::OnSelectionner_les_zones_a_analyser::SetValue(int x)
      {
      switch(x)
      {
      case 1 : RadioBouton1->SetValue(true);
      break;
      case 2 : RadioBouton2->SetValue(true);
      break;
      case 3 : RadioBouton3->SetValue(true);
      break;
      }
      }
      0
      1. GetValue() 
        étant une méthode disponible dans plusieurs classes
        différentes, il yen a une qui doit être déclarée virtuelle, celle que tu vas utiliser dans
        OnSelectionner_les_zones_a_analyser::

        (voir virtual)
        A+
        0
        1. Contributeur
          Salut.
          pour moi, tu devrai declarer "OnSelectionner_les_zones_a_analyser" comme class et non comme "void"... (declare normalement une methode ,non?)
          Ou alors il y a quelque chose qui m'échappe.
          0
          1. B j'ai essayé mais rien à faire, cela ne fonctionne toujours pas...
            0
            1. Contributeur
              MyFrame::OnSelectionner_les_zones_a_analyser::GetValue()
              fait référence à une fonction d'une class ou d'un "namespace"
              OnSelectionner_les_zones_a_analyser.
              Celle ci ne semble pas déclarer.
              donc déclare dans "MyFrame":
              class OnSelectionner_les_zones_a_analyser;
              et ensuite tu fait :
              class MyFrame::OnSelectionner_les_zones_a_analyser{//constructeur
              int GetValue();//etc...};
              int MyFrame::OnSelectionner_les_zones_a_analyser::GetValue(){//def de la fonction
              };
              ça devrai fonctionner je pense. A mon avis tu confond méthode/fonction et classe.
              Bonne chance.
              0
              1. Modérateur
                int MyDialog::GetValue(){
                  int x = 0;
                  if( RadioBouton1->GetValue() ) x = 1;
                  if( RadioBouton2->GetValue() ) x = 2;
                  if( RadioBouton3->GetValue() ) x = 3;
                  return x;
                } 

                Petit rappel sur les namespace et les classes : ils commencent par une accolade ouvrante { et finissent par une accolade fermante suivie d'un point virgule
                };
                .

                Il n'est pas utile de repréciser le namespace ou la classe si on se situe entre ces deux séparateurs.
                class MyDialog : public wxDialog
                {
                public:
                  MyDialog(wxWindow* parent, wxWindowID id, const wxString& title, int nb = 0);
                  int GetValue();  // vu de l'exterieur MyDialog::GetValue()
                  void SetValue(int);
                private:
                  wxRadioButton *RadioBouton1; // vu de l'exterieur MyDialogRadioButton1
                  wxRadioButton *RadioBouton2;
                  wxRadioButton *RadioBouton3;
                };

                Autre exemple
                namespace tapir{
                  class plop{
                     public:
                     int mamie(){return 1;} //A l'interieur de la classe : mamie
                     //...
                  };
                
                   //A l'interieur du namespace plop::mamie
                
                };
                
                //A l'exterieur tapir::plop::mamie()

                Bonne chance
                0