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 :

Toujours problèmes de classes


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Points : 41
    Points
    41
    Par défaut Toujours problèmes de classes
    Bonjour
    J'ai déjà sollicité le forum mais il me reste un problème
    Dans la séquence de programme suivante 2 erreurs apparaissent toujours et j'avoue mon impuissance

    ligne 43 'result_type' does not name a type
    ligne 57 'result_type' does not name a type
    Les 2 méthodes ont, me semble-t-il, été normalement définies (lignes 35 36)

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    struct brownian : public processus<double>
    {
           brownian(int n, double T=1)
                     : processus<double>(pow(2.,n)+1.), n(n), T(T),  //ligne 33
                     h(T/pow(2., n)), G(0,h) {};                   //ligne 34
           result_type operator()();                               //ligne 35
           result_type affine();                                   //ligne 36
           friend struct black_scholes;
           protected:
           int n;
           double h, T;
           gaussian G ;                                            //ligne 41
    };
    result_type brownian::operator()()                            //ligne 43
    {
           value.clear();
           state val_k(0,0);
           value.push_back(val_k);
           do 
              {val_k.first += h;
               val_k.second += G();
               value.push_back(val_k);
               } 
           while (val_k.first < T);
           return value;
    }
    //Classe brownian, définition de la méthode affine
    result_type brownian::affine()  //ligne 57
    {
                n++; h *= 0.5;
                G = gaussian(0, 0.5*h);
                iter precedent = value.begin(), current = ++value.begin();
                while (current != value.end()) 
                {
                 value.insert(current,
                 state(0.5*((*current).first+(*precedent).first),
                 0.5*((*current).second+(*precedent).second)+G()));
                 precedent = current;
                 current++;
                 }
                 return value;
    };
    ................ Merci ..........

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Où est défini result_type ? Il te faut probablement quelquechose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    processus<double>::result_type brownian::operator()()
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Ligne 43 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    processus<double>::result_type brownian::operator()()  
    {
    ...
    }
    Ligne 57


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    processus<double>::result_type brownian::affine()
    {
    ...
    }

    La raison de cette erreur de compilation : lorsque tu es dans la classe brownian et que le compilateur rencontre un symbole qu'il ne connait pas, il regarde si en élargissant son champs de recherche ce symbole existe. Il le trouve dans la classe mère de brownian.

    En dehors de la classe (lorsqu'il compile la méthode), il est limité à ce qu'on appelle la recherche de Koenig (koenig's lookup) : un symbole qui n'est pas défini dans le nom d'espace courant et peut être dépendant du type avec lequel il est utilisé. Il cherche donc un brownian::result_type, mais n'en trouve pas (parce qu'il est dans processus<double> et que sa recherche à ce moment ne va pas jusque là).

    D'où l'erreur.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Dans le code que tu montres, il manque la déclaration d'une classe template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename T>
    struct processus
    {
         //....
    };

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Points : 41
    Points
    41
    Par défaut
    Avec tous mes remerciements ..... sans doute vais-je abuser mais tant pis
    voila la phase de link edit me renvoie cette dernière anomalie
    ligne 36

    In constructor ‘brownian::Brownian(in,double)’
    [warning] passing ‘double’ for converting 1 of ‘processus<T>::processus[int][with T = double]’
    [Linker error] udefined reference to ‘std::ostream&operator<<<double>[std::ostream&,processus
    <double> cons&)]’
    Id return 1 exit status

    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
    struct processus
    {
    typedef std::pair<double, T> state;
    typedef std::list<state> result_type;
    typedef typename result_type::iterator iter;
    typedef typename result_type::const_iterator cst_iter;
    processus(int size = 0) : value(size) {};
    virtual result_type operator()() = 0;
    result_type current() const { return value; };
    template <typename S>
    friend std::ostream& operator<<(std::ostream &o,
    const processus<S> &p);
    protected:
    result_type value;
    };
     
    struct brownian : public processus<double>
    {
           brownian(int n, double T=1)
                     : processus<double>(pow(2.,n)+1.), n(n), T(T),  //ligne 35
                     h(T/pow(2., n)), G(0,h) {};                   //ligne 36
           result_type operator()();                               //ligne 37
           result_type affine();                                   //ligne 38
           friend struct black_scholes;
           protected:
           int n;
           double h, T;
           gaussian G ;                                            
    };

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    L'opérateur est déclaré mais n'est pas défini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::ostream& operator<<(std::ostream &o, const processus<S> &p)
    {
      o << p.value;
      return o;
    }
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Points : 41
    Points
    41
    Par défaut
    Cela passe en compil .... J'obtiens des résultats .... Merci
    Vous m'avez fait gagner un temps difficile à chiffrer

Discussions similaires

  1. Problème sur classe Transformer avec les <!--
    Par tykool dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2006, 11h20
  2. Toujours problème de perspective :-(
    Par gmonta dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 16/12/2005, 14h41
  3. Problème de classe
    Par DeusXL dans le forum DirectX
    Réponses: 15
    Dernier message: 04/12/2005, 15h37
  4. Problème de classe
    Par tidou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/10/2005, 18h49
  5. [FLASH MX2004] Problème de classe
    Par JulPoWeR dans le forum Flash
    Réponses: 1
    Dernier message: 10/07/2005, 23h51

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