[C++] Problème int

Fermé
fredvince Messages postés 14 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 14 juillet 2006 - 28 févr. 2006 à 11:30
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 3 mars 2006 à 20:30
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

7 réponses

blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
28 févr. 2006 à 11:42
peut on voir les prototypes des méthodes :
OnSelectionner_les_zones_a_analyser() ?
GetValue() ?
0
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
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
1 mars 2006 à 13:05
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 mars 2006 à 13:42
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredvince Messages postés 14 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 14 juillet 2006
3 mars 2006 à 11:32
B j'ai essayé mais rien à faire, cela ne fonctionne toujours pas...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 mars 2006 à 13:11
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
3 mars 2006 à 20:30
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