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

 C++ Discussion :

Probleme sur classe abstraite argument non reconu


Sujet :

C++

  1. #1
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut Probleme sur classe abstraite argument non reconu
    Cheres amies , chers amis du forum

    Voici deux classes abstraite:

    var_alea.h
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #ifndef __VAR_ALEA_H_
    #define __VAR_ALEA_H_
     
    #include <cmath>
    #include <ctime>
    #include <cmath>     
    #include <ctime>
    #include <cstdlib>
    #include <numeric>
     
    #define MAX(A,B) ( (A) > (B) ? (A):(B) )
    #define MIN(A,B) ( (A) < (B) ? (A):(B) )
     
    #define PI 3.14159265358979
    #define DEUXPI 6.283185306
    #define PI2 1.570796326794
     
    class var_alea
    {
    public:
     
    	var_alea() {};
        virtual ~var_alea() {}; 
        virtual double operator()() = 0;
     
    protected: 
     
     
    };
    #endif
    Processus.h

    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
    18
    19
    #include <list>
    #include <utility>
    #include <iostream>
    #include "var_alea.h"
    #include "Poisson.h"
     
    using namespace std;
     
    class Processus 
    {
    public :
    		Processus (int size = 0) : m_valeurs ( size ) {};
    		virtual list <pair <double , double > > operator ()() = 0;
    		friend ostream & operator <<(ostream &o, const Processus &p);		
     
    protected :
    		list < pair <double , double > > m_valeurs ;
     
    };
    Processus.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Processus.h"
     
    std::ostream& operator<<(std::ostream &o, const Processus &p)
    {
    	list < pair <double , double > >::const_iterator i;          //Une paire est une structure contenant deux éléments éventuellement de types différents. 
    														         //La classe list fournit une structure générique de listes chaînées. 
    	for(i = p.m_valeurs.begin() ; i != p.m_valeurs.end(); ++i)
    		o << (*i).first << "\t" << (*i).second << std::endl;
    	return o;
    }
    Avec ceci je dois creer une classe poisson_composé qui simule une loi de Poisson composé.

    Pour cela je dispose d'une classe Poisson qui depend de var_alea.h

    poisson.h

    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
    18
    19
    20
    21
    22
    #ifndef POISSON_H
    #define POISSON_H
     
    #include "var_alea.h"
    #include "Uniform.h"
     
    class Poisson : public Processus
    {	
    	public:
    		   Poisson (double lambda = 0) : m_lambda(lambda)
    			{
    			}
    	       Poisson (const Poisson &);
    	       double operator ()();
    	       Poisson & operator =(const Poisson &);
    	       friend Poisson operator +(const Poisson &, const Poisson &);
     
    	private:
    		double m_lambda;
    };
     
    #endif
    et poisson_composé.h

    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
    #include "Processus.h"
     
    class Poisson_Compose : public Processus 
    {
    public :
    		Poisson_Compose ( var_alea &X, int n, double T=1, double lambda =1) : m_P(lambda),m_X(X), m_n(n), m_T(T), m_lambda(lambda)																					
    			{
    				 m_h=(T / pow(2.0, n));
    			}
    		list <pair <double , double > > operator ()();
     
    protected :
    		int m_n;
    		Poisson m_P;
    		var_alea &m_X;
    		double m_h, m_T, m_lambda ;
    };
    Jusque là aucun probleme, cependant dans mon poisson_composé je dois boucle dans une List, a partir d'une variable Poisson que j'ai et declaré dans Proccesus.h sauf qu'il ne reconnait pas les arugment de processus:

    Pocessus.cpp

    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
    18
    #include "Poisson_Composé.h"
     
    list < pair <double , double > >Poisson_Compose ::operator()() 
    {
    	m_valeurs.clear();                          // clear List
    	pair <double , double > T;                  // création d'une paire
    	m_valeurs.push_back(T = make_pair (0,0));   // initialisation de T
    	m_P();
     
    	list < pair <double , double > >::const_iterator i;
     
    	for(i = m_P.m_valeurs.begin(); i != m_P.m_valeurs.end(); ++i)
    	{
    		T.first   = (*i).first;
    		T.second += m_X();
    		m_valeurs.push_back(T);
    	}
    };
    J'ai surligné les variable non reconnu.

    ce sont les instructions suivante qui ne sont pas reconnu:

    for(i = m_P.m_valeurs.begin(); i != m_P.m_valeurs.end(); ++i)
    m_valeurs n'apparrait pas apres le . dans le menu déroulant

    Pourriez vous m'aider SVP

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    J'ai du mal à comprendre ce que fait cette ligne dans 'Pocessus.cpp' : Il semble que 'm_p' ne soit pas une variable, mais une fonction, non?
    Ce serait alors normal que 'm_valeurs' n'apparaisse pas après le '.' dans le menu déroulant.
    Quels sont les messages du compilateur à la compilation?

  3. #3
    Invité
    Invité(e)
    Par défaut
    m_P est bien une variable, de type Poisson et qui a un operateur parenthèse donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    m_P(); 
    // est équivalent à
    m_P.operator();
    Pour ce qui du problème initiale, ce n'est pas vraiment un problème : l'autocomplétition (dans ton cas, le menu déroulant si j'ai bien compris) n'est pas un outils 'fiable'; il est possible que les fichier sources n'ait pas été parsé récemment... En fonction de ton EDI, tu peux soit enregister toutes tes sources(CodeBlocks), soit les raffraichir(KDevelop, MSVC++ aussi je crois) pour tenter de résoudre le problème. Evidemment si tu as faitune faute de grammaire dans un tes fichier, ça risque de perturber le parseur, et donc de faire bugger l'autocomplétition. En clair l'autocomplétition est un outil 'falcultatif'(pas comme le compilateur ou le linkeur), à qui il arrrive de bugguer(même chose pour la coloration syntaxique d'ailleurs).

    EDIT: En fait ton message n'est pas clair. Y a-t-il une erreur de compilation à la ligne indiquée ?

    EDIT 2: Enfin pour souligner que cette ligne me semble vraiment horrible :
    Jamais d'using-directive dans un header !!!

    EDIT 3: Vu que ta fonction n'est pas déclaré const, m_valeur ne l'est pas non plus. begin() et end() renvoient des iterator et pas des const_iterator. D'autres membres de ce club pourront peut-être préciser si une conversion de l'un vers l'autre est spécifiée par le standard.
    Dernière modification par Invité ; 06/02/2011 à 16h31.

  4. #4
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Merci

    il ya bien une erreur à la compile à ce moment là voici le rapport:

    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
     
    1>  Poisson_Compose.cpp
    1>c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson_compose.cpp(12): error C2039: 'm_valeurs'*: n'est pas membre de 'Poisson'
    1>          c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson.h(7)*: voir la déclaration de 'Poisson'
    1>c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson_compose.cpp(12): error C2228: la partie gauche de '.begin' doit avoir un class/struct/union
    1>c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson_compose.cpp(12): error C2039: 'm_valeurs'*: n'est pas membre de 'Poisson'
    1>          c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson.h(7)*: voir la déclaration de 'Poisson'
    1>c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\poisson_compose.cpp(12): error C2228: la partie gauche de '.end' doit avoir un class/struct/union
    1>  Génération de code en cours...
    1>  Compilation en cours...
    1>  Processus.cpp
    1>  Génération de code en cours...
    1>  Compilation en cours...
    1>  main.cpp
    1>c:\documents and settings\magnum thomas\mes documents\visual studio 2010\projects\projet_ifma_examen\projet_ifma_examen\main.cpp(9): warning C4244: 'argument'*: conversion de 'time_t' en 'unsigned int', perte possible de données
    1>  Génération de code en cours...
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  5. #5
    Invité
    Invité(e)
    Par défaut
    m_valeurs est un membre privée de Processus. Donc il est accessible par toutes les fonctions membres(ou amies) de cette classe, et ce quelque soit l'instance concernée, mais uniquement de cette classe. Ce qui signifie que les methodes des classes dérivées n'ont pas un accès direct à la variable m_valeurs, que ce soit celui de l'instance pointée par this ou d'une autre instance.

Discussions similaires

  1. POO : besoin de confirmation sur classe abstraite
    Par loic20h28 dans le forum Design Patterns
    Réponses: 8
    Dernier message: 20/01/2009, 09h43
  2. [EJB3 Entity] manytomany sur classe abstraite
    Par maibey dans le forum Java EE
    Réponses: 2
    Dernier message: 17/01/2009, 15h14
  3. probleme sur passage d'argument
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 31/01/2008, 10h55
  4. pb héritage sur classe abstraite et iterator
    Par black-falco dans le forum C++
    Réponses: 21
    Dernier message: 05/01/2008, 17h38
  5. Réponses: 3
    Dernier message: 07/04/2003, 21h06

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