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 error: 'noeud' does not name a type|


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut probleme error: 'noeud' does not name a type|
    bonsoir,
    pour un travail de fac je doit réaliser 3 arbres lexicographiques a partir de fichier txt.
    Le but de ce TP est de remplir un arbre lexicographique avec les mots d'un texte,
    compter le nombre d’occurrences de chaque mot afin de dire quel est le mot le plus
    fréquent. Vous répondrez aussi à la question quel est le mot le plus long du texte.

    Mais j'ai un soucis d'erreur quand je veux compiler mon programme et je n'arrive pas a trouver d'ou peut venir l erreur

    voici mon code si quelqu'un peut me renseigner

    ABRLEX.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
    31
    #ifndef ABRLEX_H
    #define ABRLEX_H
    #include <iostream>
     
    using namespace std;
     
    class ArbreLex
    {
        private :
            noeud* racine;
            noeud* current;
        public :
            ArbreLex();
            ~ArbreLex();
            bool find(char name);
            bool chercher(int x,noeud* buffer,char name);
            Insertion(string ligne);
            ajout(noeud*x,noeud*y);
    };
     
    struct noeud
    {
        char s;
        noeud*fg;
        noeud*frd;
        int Occurrences;
        constructionNoeud(char *s,noeud* y,noeud* z);
        Supression(noeud* r);
    };
     
    #endif // ABRLEX_H
    ABRLEX.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #include "ABRLEX.h"
    #include <iostream>
    using namespace std;
     
    ABRLEX::ABRLEX()
    {
            racine=constructionNoeud("/");
            current=racine;
    }
     
    ABRLEX::~ABRLEX()
    {
       Suppression(noeud * racine)
    }
     
    noeud *ABRLEX::constructionNoeud(char s)
    {
        noeud* n=new noeud(s);
        noeud *y= new noeud();
        n->fg=y;
    }
     
    void ABRLEX::Insertion(string ligne, int Occurrences)
    {
        current=racine;
        int a = ligne.length();
        int b = a+1;
        char[] tab = new char[b];
        for(int i = 0; i < a;i++)
        {
            if (i=b-1)
            {
                char c = static_cast<int>(Occurences);
                tab[i]=c;
            }
            else
            {
                tab[i] = ligne.charAt(i);
                if (!find(tab[i]))
                {
                    if(current->frd!=NULL)
                    {
                        current=current->frd;
                        ajout(constructionNoeud(tab[i]),current);
                    }
                    else
                        current->frd=constructionNoeud(tab[i]);
                }
            }
        }
    }
     
    void ABRLEX::affichage()
    {
        if(root !=NULL)
        {
            affiche(root);
        }
    }
    void ABRLEX::affiche(noeud*r)
    {
        if(r)
        {
            affiche(r->fg);
            cout<<r->info<<endl;
            if(r->frd != NULL)
            affiche(r->frd);
            else
                cout <<"le nombre d'occurence de ce mot est de : "<< affiche(r->frd)<< endl;
        }
    }
     
    void ABRLEX::ajout(noeud*x,noeud*y)
    {
        current=y;
        current->fg=x;
    }
     
    bool ABRLEX::find(char name)
    {
        noeud*buffer=new noeud();
        noeud*buffer=current->fg;
        return chercher(0,buffer,name);
    }
     
    bool ABRLEX::chercher(int x,noeud* buffer,name)
        if(buffer!=NULL)
            {
                 if(strcomp(buffer->info,name)==0)
                    {
                        current=buffer;
                        return true;
                    }
     
                chercher(x+1,buffer->fg);
                chercher(x+1,buffer->frd);
            }
        return false;
    }
    noeud * ABRLEX::Suppression(noeud *r)
    {
        if(r)
            {
                Suppression(r->fg);
                Suppression(r->frd);
                delete r;
            }
    }
    Main.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <limits>  // pour utiliser numeric_limits<int>::max()
    #include "ABRLEX.h"
    using namespace std;
     
    int main()
    {
            string texte = "texte-petit.txt";
            ArbreLex texte ;
            ifstream fichier_texte(texte.c_str(), ios::in);
            if(fichier_texte.fail())
                    cout << "Le fichier " << texte << " n'existe pas !" << endl;
            ifstream fichier("texte-petit.txt", ios::in);
            if(!fichier.fail())
            {
                    cout << "Le fichier existe bien et est correctement ouvert !" << endl;
                    cout << "Le fichier contient : " << endl << endl;
                    string ligne;
                    while(getline(fichier, ligne))
                    {
                        int Occurrences = count(istream_iterator<string>(fichier), istream_iterator<string>(), ligne);
                        texte.Insertion(ligne,Occurrences);
                    }
                    fichier.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            string texte1= "texte-moyen.txt";
            ArbreLex texte1;
            ifstream fichier1_texte1(texte1.c_str(), ios::in);
            if(fichier1_texte1.fail())
                    cout << "Le fichier " << texte1 << " n'existe pas !" << endl;
            ifstream fichier1("texte-moyen.txt", ios::in);
            if(!fichier1.fail())
            {
                    cout << "Le fichier existe bien et est correctement ouvert !" << endl;
                    cout << "Le fichier contient : " << endl << endl;
                    string ligne1;
                    while(getline(fichier1, ligne1))
                    {
                        int Occurrences = count(istream_iterator<string>(fichier1), istream_iterator<string>(), ligne1);
                        texte1.Insertion(ligne1,Occurrences);
                    }
                    fichier1.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            string texte2 = "texte-gros.txt";
            ArbreLex texte2;
            ifstream fichier2_texte2(texte2.c_str(), ios::in);
            if(fichier2_texte2.fail())
                    cout << "Le fichier " << texte2 << " n'existe pas !" << endl;
            ifstream fichier2("texte-gros.txt", ios::in);
            if(!fichier2.fail())
            {
                    cout << "Le fichier existe bien et est correctement ouvert !" << endl;
                    cout << "Le fichier contient : " << endl << endl;
                    string ligne2;
                    while(getline(fichier2, ligne2))
                    {
                        int Occurrences = count(istream_iterator<string>(fichier2), istream_iterator<string>(), ligne2);
                        texte2.Insertion(ligne2,Occurence);
                    }
                    fichier2.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
            return 0;
     
    }
    au cas où certains voudrais voir les question du TP pour comprendre les différentes fonctions les voici

    Question 1

    Modifier les structures de manière à associer à chaque mot du lexique un entier, cet
    entier sera stocké en fin de mot.

    Question 2

    Écrire les fonctions nécessaires au remplissage de l'arbre avec les mots du fichier
    tout en comptant le nombre de fois que chaque mot est présent. L'algorithme de
    comptage est :
    pour chaque mot du texte, le chercher dans l'arbre, s'il est déjà présent, incrémenter
    son compteur sinon ajouter le mot. Indice : la recherche et l'insertion se font dans la
    même opération.

    Question 3

    Écrire une fonction d'affichage du lexique stocké dans l'arbre avec le nombre
    d'occurence de chaque mot.

    Question 4

    Écrire une fonction qui cherche le mot le plus fréquent dans l'arbre.

    Question 5

    Écrire une fonction qui cherche le mot le plus long dans l'arbre.
    Pour réaliser ce TP 3 textes fournis, un petit, un moyen, un gros.
    et voici les erreurs de compilation

    ||=== Build: Debug in tpabrNAIRLEX (compiler: GNU GCC Compiler) ===|
    include\ABRLEX.h|10|error: 'noeud' does not name a type|
    include\ABRLEX.h|11|error: 'noeud' does not name a type|
    include\ABRLEX.h|16|error: 'noeud' has not been declared|
    include\ABRLEX.h|18|error: 'noeud' has not been declared|
    include\ABRLEX.h|18|error: 'noeud' has not been declared|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp||In function 'int main()'
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|11|error: conflicting declaration 'ArbreLex texte'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|10|note: previous declaration as 'std::string texte'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|23|error: 'istream_iterator' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|23|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|23|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|23|error: expected primary-expression before ')' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|23|error: 'count' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|24|error: 'std::string' has no member named 'Insertion'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|32|error: conflicting declaration 'ArbreLex texte1'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|31|note: previous declaration as 'std::string texte1'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|44|error: 'istream_iterator' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|44|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|44|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|44|error: expected primary-expression before ')' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|44|error: 'count' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|45|error: 'std::string' has no member named 'Insertion'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|53|error: conflicting declaration 'ArbreLex texte2'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|52|note: previous declaration as 'std::string texte2'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|error: 'istream_iterator' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|error: expected primary-expression before '>' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|error: expected primary-expression before ')' token|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|error: 'count' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|66|error: 'std::string' has no member named 'Insertion'|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|66|error: 'Occurence' was not declared in this scope|
    C:\Users\User\Desktop\tpabrNAIRLEX\main.cpp|65|warning: unused variable 'Occurrences' [-Wunused-variable]|
    ||=== Build failed: 27 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 489
    Par défaut
    Vous utilisez un "noeud*" ligne 10 de votre ABRLEX.H.
    Comment le compilateur peut-il savoir qu'est-ce qu'un "noeud" ?
    Réponses :

    soit vous lui donnez la définition d'un "noeud" en incluant la déclaration de cette classe, qui est vraisemblablement dans un "noeud.h".
    soit vous faites une forward déclaration de la classe, si vous n'utilisez que des pointeurs ou des références sur noeud dans votre déclaration de classe "ArbreLex".

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut
    ? hummm
    ben il le sais de part la struct noeud normalement non ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 489
    Par défaut
    Citation Envoyé par joe0703 Voir le message
    ? hummm
    ben il le sais de part la struct noeud normalement non ?
    Et comment le compilateur, qui compile cpp par cpp, et qui oublie tout entre chaque cpp peut savoir que "struct noeud" existe quand il s'attèle à la compilation de "ABRLEX.cpp" ?
    En plus, il peut très bien compiler "ABRLEX.cpp" avant "noeud.cpp".

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par joe0703 Voir le message
    ? hummm
    ben il le sais de part la struct noeud normalement non ?
    Exactement. Struct noeud qui est déclarée après ArbreLex, et le compilateur il traite un fichier ligne par ligne et dans l'ordre. Donc quand il traite ArbreLex, noeud n'existe pas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut
    et donc ? faudrait simplement déclarer ma struct avant ma class ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 489
    Par défaut
    faudrait simplement déclarer ma struc avant ma class ?
    Par exemple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. error: 'wxString' does not name a type'
    Par jcmic dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 08/03/2015, 18h00
  2. error: ‘i1’ does not name a type
    Par JackStrieger dans le forum C++
    Réponses: 3
    Dernier message: 15/01/2014, 15h23
  3. Colonne’ does not name a type
    Par tamtoum1987 dans le forum C++
    Réponses: 7
    Dernier message: 23/03/2012, 09h19
  4. ‘Arbre’ does not name a type
    Par SAKDOSS dans le forum C++
    Réponses: 12
    Dernier message: 21/04/2009, 14h53
  5. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25

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