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 :

Problème classe Console


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut Problème classe Console
    Bonjour tout le monde
    voila je veux bien utiliser la classe Console ,
    mais quand par exemple j'utilise une méthode de cette classe comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console::SetWindowSize( 40, 20 );
    j'ai une erreur :
    'Console' has not been declared 
    je veux bien savoir comment l'utiliser ou la déclarer

    merci d'avance

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum.

    Ce message t'indique, simplement, que le compilateur ne connait pas la classe Console.

    Il faut en effet savoir que le compilateur va travailler un peu à la manière dont tu lirais un livre:

    Pour chaque fichier d'implémentation (typiquement les fichiers dont l'extension est *.cpp, bien qu'il existe d'autres extensions possibles ), il va lire le code de la première ligne à la dernière.

    Et tout comme toi, tu ne sais pas ce qui se passe à la page 12 d'un livre lorsque tu en es à la page 10, le compilateur ne sait pas ce qui se trouve à la ligne 12 d'un fichier lorsqu'il se trouve à la ligne 10.

    Et comme il "oublie" de manière systématique tout ce qu'il a fait pour le fichier qu'il vient de traiter lorsqu'il passe au fichier suivant, il faut donc s'assurer qu'il connait tout ce que l'on va essayer d'utiliser avant qu'il ne rencontre l'utilisation de quelque chose qu'il ne connait pas.

    C'est dans cette optique que l'on sépare généralement le code en deux fichiers bien distincts :

    Un fichier d'en-tête (qui prendra, classiquement, l'extension *.h ou *.hpp) qui permet au compilateur connaitre quelque chose et un fichier d'implémentation qui permet d'indiquer au compilateur "ce qui doit être fait".

    Ce message peut avoir deux origines bien distinctes:

    Soit tu as oublié d'inclure le fichier d'en-tête qui contient la définition de ta classe Console.

    Soit tu te trouves dans une situation dans laquelle tu as ce que l'on appelle une dépendance cyclique : une classe A qui doit connaitre une classe B qui doit elle meme connaitre la classe A.

    La solution pour la première possibilité est relativement simple : il "suffit" d'inclure le fichier d'en-tête correspondant (Console.hpp ) avant d'essayer d'utiliser la classe Console.

    La solution pour la deuxième possibilité consiste à utiliser les déclarations anticipées.

    Notes enfin que C++ est un langage dit "sensible à la casse" : le mot "console" (tout en minuscule) est considéré comme étant différent du mot "Console" (avec un C majuscule)...

    Si tu as défini une classe console et que tu essayes de l'utiliser sous le nom de Console, le compilateur ne pourra pas faire le rapprochement entre les deux

    [EDIT]Notes au passage que:
    1- Le compilateur est une bestiole étrange, qui nous noie régulièrement sous une tonne de "fausses erreurs" lorsqu'il a "perdu les pédales".

    Généralement, il rencontre une première erreur (un ; ou un } manquant) et "perd les pédales", ce qui fait qu'il ne reconnait plus rien du code qui suit.

    Il faut donc généralement veiller à traiter en priorité les premières erreurs qu'il indique, car il y a "de fortes chances" pour que les erreurs suivantes ne soient que de "faux positifs" dus aux premières.

    2- Le code que tu présentes n'est pas forcément faux, mais je serais d'une certaine manière malgré tout assez surpris qu'il soit correct

    L'appel de la fonction tel que tu l'écris ne sera en effet valide que si la fonction SetWindowSize est une fonction statique de la classe Console.

    Autrement dit, cela signifie que tu ne peux définir qu'une taille qui sera commune à l'ensemble des différentes instances de la classe Console.

    C'est peut être le cas, mais il y a "fort à parier" que cette fonction permette surtout de préciser la taille de la fenêtre de manière indépendante pour chaque instance de la classe Console.

    Dans ce cas, tu devrais en réalité passer par la variable de type console dont tu disposes (normalement).

    Ton code risques donc de devoir ressembler d'avantage à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* soit une variable nommée cons qui est de type Console */
    cons.SetWindowSize( 40, 20 );
    voire, si la variable en question est un pointeur, à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* soit un pointeur vers un objet de type Console et appelé ptr */
    ptr->SetWindowSize( 40, 20 );
    [/EDIT]
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    merci énormément

    I learned a lot from that answer :p

    Je crois que mon prob c'est que je ne peut pas inclure le fichier <console.h>
    l'erreur que je reçois est : no such file or directory .

    :s

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par solitrion Voir le message
    merci énormément

    I learned a lot from that answer :p

    Je crois que mon prob c'est que je ne peut pas inclure le fichier <console.h>
    l'erreur que je reçois est : no such file or directory .

    :s
    Alors, là, il faut déjà faire attention à la casse du nom du fichier à inclure: console.h est (sous certains systèmes d'exploitation du moins) différent de Console.h.

    La première chose est donc de vérifier si tu as correctement orthographié le nom du fichier que tu essaye d'inclure (y compris, et surtout, les éventuelles majuscules).

    La deuxième chose à faire est de t'assurer que le compilateur connaisse le chemin d'accès au dossier dans lequel le fichier d'en-tête se trouve.

    Si tu ne dis rien au compilateur, il va essayer de trouver les fichiers d'en-tête dans un nombre finalement très limité de dossiers:
    1. quelques dossiers qui sont connu pour contenir les fichiers d'en-tête "standard" et
    2. le dossier dans lequel se trouve le fichier .cpp qu'il est occupé à compiler.
    Le problème, c'est que les projet sont souvent organisés de manière à séparer les fichiers d'en-tête (qui se trouvent bien souvent dans un dossier nommé "include")et les fichiers d'implémentation (qui se trouvent bien souvent dans un dossier nommé "src").
    Une arborescence "classique" pourrait donc prendre la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dossier "racine" du projet
    |-> bin
    |   c'est le dossier dans lequel s'effectue la compilation
    |-> include
    |   |->Console.h
    |   |-> les autres fichiers .h
    |->src
    |   |->Console.cpp
    |   |-> les autres fichiers .cpp
    |->d'autres dossiers éventuels
    Evidemment, si tu ne précise pas au compilateur que
    Ah, au fait, tu trouveras les fichiers d'en-tête dans le dossier include
    il n'ira pas les chercher de lui-même.

    Généralement, pour ajouter un dossier dans lequel le compilateur doit aller chercher après les fichiers d'en-tête, on utilise l'option I<chemin/vers/le/dossier_en_question> (il s'agit du i majuscule ).

    Avec Gcc, par exemple, si tu te trouves dans le dossier bin (car c'est là que se fait la compilation) et que tu veux compiler Console.cpp, tu devrais utiliser la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -c ../src/Console.cpp -o Console.o -I../include
    Après, il y a énormément de choses qui dépendent de l'EDI éventuellement employé et / ou de la manière dont tu automatises la compilation.

    Il est toujours utile de vérifier les options de compilation que ton EDI aura définies par défaut, afin, entre autres, de t'assurer qu'il a bel et bien rajouté le dossier qui contient les fichiers d'en-tête dans les options de compilation.

    Mais ca, ca se fait de manière spécifique à l'EDI (chacun planquant ces informations où bon lui semble ), et je ne pourai pas t'en dire plus tant que je ne saurai pas lequel tu utilise

    Enfin, si tu n'utilises pas d'EDI mais uniquement un système d'automatisation de la compilation comme cmake ou comme les Makefile, il faudra t'intéresser à la manière de rajouter les chemins utilisés pour la recherche des fichiers d'en-tête.

    Cela passe généralement par le fait de rajouter l'option adéquate au niveau de variables ou comme CPP_FLAGS
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Par défaut
    J'ai comris

    j'ai comme IDE qt 5.1.1 , compilateur Mingw 4.8 32bit , comme OS windows 8

    je me suis cassé la téte pour retrouver include qui contient console , ou src qui contient console.cpp

    est ce que vous avez une idée

    merci beaucoup

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par solitrion Voir le message
    J'ai comris

    j'ai comme IDE qt 5.1.1 , compilateur Mingw 4.8 32bit , comme OS windows 8
    Non, Qt n'est pas un IDE (Integrated Development Environment ou Environnement de Développement intégré, si tu préfères ), mais un framework (ou, si tu préfères, un ensemble de bibliothèques qui fonctionnent bien ensemble) qui était à la base une unique bibliothèque orientée vers la création d'IHM .

    Par contre, ton IDE a de fortes chances d'être qtcreator, non

    Tu pourrais également utiliser code::blocks, mais le choix de qtcreator semble "logique" étant donné la configuration actuelle
    je me suis cassé la téte pour retrouver include qui contient console , ou src qui contient console.cpp

    est ce que vous avez une idée
    Des idées, je n'en manque pas... Mais il y a peu de chance qu'elles te soient d'un quelconque secours

    Par contre, je peux te donner quelques pistes

    Les projets Qt sont généralement gérés au départ d'un fichier dont l'extension est .pro (et dont le nom correspond généralement au nom du projet en cours, comme par exemple new_project.pro ) et qui devrait apparaitre dans la vue "projets" de qtcreator.

    C'est un simple fichier texte qui reprend l'ensemble des réglages pour mener la compilation à son terme.

    Si tu double cliques sur ce fichier, qtcreator te l'ouvrira et te permettra d'en voir le contenu

    Dans ce fichier, tu devrais avoir deux variables nommées respectivement HEADERS, qui reprend la liste des fichiers d'en-tête que tu as rajoutés à ton projet et la variable SOURCES qui reprend la liste des fichiers d'implémentation (*.cpp) que tu as rajouté à ton projet.

    Ces listes utilisent les chemins relatifs qui permettent, au départ du fichier .pro, d'accéder aux différents fichier.

    Tu devrais donc avoir quelque chose qui pourrait ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SOURCES += src/Console.cpp \
              # ...(autres fichiers d'implémentation)
               src/main.cpp
     
    INCLUDES += include/Console.hpp \
              # ...(autres fichiers d'en-tête)
    Si c'est le cas, tu peux rajouter le dossier qui contient les fichiers d'en-tête (ici, c'est juste include) à la variable INCLUDEPATH sous la forme de
    Evidemment, les éventuels dossiers qui pourraient se trouver à gauche de include ont toute leur importance

    Par exemple, je suis actuellement sur un projet dans lequel les différentes variables sont déclarées sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INCLUDEPATH += ../../ebnf/include
    SOURCES += \ 
        ../../ebnf/src/BnfNode.cpp \
        # d'autres fichiers d'implémentation
    HEADERS += \
    # remarque que ../../ebnf/include correspond valeur définie pour
    # la varariable INCLUDEPATH 
        ../../ebnf/include/BnfNode.h \ 
        #d'autres fichiers d'en-tête
    Si tu as laissé qtcreator créer ton projet dans le chemin par défaut, il y a de fortes chances que ton projet se trouve dans ton dossier "documents", dans un sous dossier portant le nom du projet lui-même. (typiquement dans c:\Utilisateurs\<ton nom>\Document\<nom du projet> ).

    Si tu as sélectionné un autre dossier dans lequel générer ton projet, il t'appartient de savoir où tu as été le mettre

    Notes enfin que, si tu n'as pas créé la classe Console, ou si tu n'as pas donné les noms corrects à tes fichiers, il y a peu de chances pour que le reste fonctionne

    Pourrais tu donc placer ici:
    • une copie du contenu de ton fichier .pro
    • une copie des différents fichiers de ton projet.
    A mon avis, tu as "simplement" fait une erreur dans les différents noms de tes fichiers
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. problème classe managée.
    Par adicor dans le forum MFC
    Réponses: 5
    Dernier message: 08/05/2006, 21h19
  2. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45
  3. Problème class
    Par Anduriel dans le forum Langage
    Réponses: 19
    Dernier message: 28/01/2006, 19h34
  4. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  5. problème classe et fonction
    Par zmatz dans le forum C++
    Réponses: 14
    Dernier message: 19/10/2005, 21h46

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