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 :

MinGW, pthread.h et déclaration de classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Par défaut MinGW, pthread.h et déclaration de classes
    Salut à tous,

    J'ai un problème du genre un peu casse-couille.
    Déjà, je précise que mon code marche sans problème sous linux / mac os, mais je dois le porter sous windows, j'ai donc choisi d'utiliser MinGW.

    Voilà le code problématique :
    (pour résumer : )
    Fichier MaClasse.hpp (c'est pas les vrais noms)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Arc;
     
    class pouet {
    Arc maFun();
    };
    En pratique, pouet (pas le vrai nom non plus ^_^) utilise des pthread_t donc j'inclus pthreads.h.
    Or, quand je l'inclus, et uniquement quand je l'inclus (les autres includes ne posent pas de problème particulier) j'ai l'erreur :
    'Arc' does not name a type.

    Voilà, je m'arrache les cheveux là-dessus, j'espère vraiment que c'est pas une erreur débile.

    bonne soirée

  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,

    Mais, avant d'arriver à l'erreur
    Arc doesn't name a type
    , n'aurais tu pas, à tout hasard, d'autres erreurs

    Je pense esentiellement à une ereur du genre
    fatal : cannot find pthread.h
    Bien souvent, le fait qu'un erreur se produise au moment du parsing occasionne une série d'autres erreurs qui n'ont, en réalité, aucun sens.

    Si le fait de rajouter une inclusion de fichier d'en-tête correcte fait que le compilateur te sort une série d'erreurs incongrues, c'est très souvent parce qu'il n'a simplement pas trouvé le fichier d'en-tête en question

    Pour résoudre ce problème, il faut
    1. s'assurer de la présence du fichier d'en-tête sur ton pc (et, tant qu'à faire, s'assurer que toute la bibliothèque pthreads est installée )
    2. s'assurer que le fichier d'en-tête se trouve dans un dossier qui sera visité par le compilateur lorsqu'il recherchera les en-tête
      • soit en le plaçant dans un des dossiers dans lesquels il cherche dejà
      • soit en utilisant l'option -Ichemin/vers_le_dossier_ad_hoc (nota: il s'agit d'un i majuscule )
    Note que cela ne résoudra sans doute qu'une partie du problème, car il s'agira sans doute aussi d'indiquer à l'éditeur de liens qu'il doit également utiliser ce qui se trouve dans libpthread.a, ainsi que le chemin d'accès vers le dossier où se trouve cette bibliothèque, si, encore une fois, ce n'est pas un dossier "classique"
    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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 18
    Par défaut
    Salut,
    Hélas non, ce sont les seules erreurs produites par ce code, d'un part, et d'autre part, dans d'autres portions du programme compilées séparément, la librairie pthreads que j'utilise (http://sourceware.org/pthreads-win32/) marche très bien.

    Donc oui, il est dans mon include et mon libpath (en fait j'ai copié les headers de pthread dans le include de mingw et de même pour le .lib)

    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    À tout hasard, as-tu essayé de changer le nom 'Arc' (enfin le vrai nom) qui serait peut-être déjà utilisé pour autre chose dans pthreads.h.

  5. #5
    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 MicBeastKiller Voir le message
    À tout hasard, as-tu essayé de changer le nom 'Arc' (enfin le vrai nom) qui serait peut-être déjà utilisé pour autre chose dans pthreads.h.
    Si c'était le cas, cela ne changerait rien, étant donné qu'il ne s'agit "que" d'une déclaration anticipée

    Enfin, il faudrait que je vérifie, mais je crois que nous aurions un autre message d'erreur si l'on essayait de faire une déclaration anticipée d'une classe en utilisant le nom d'une énumération ou d'une union
    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

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Si c'était le cas, cela ne changerait rien, étant donné qu'il ne s'agit "que" d'une déclaration anticipée

    Enfin, il faudrait que je vérifie, mais je crois que nous aurions un autre message d'erreur si l'on essayait de faire une déclaration anticipée d'une classe en utilisant le nom d'une énumération ou d'une union
    C'était au cas où car je n'ai pas de compilateur sous la main (ou plutôt sur ma machine actuelle ) pour tester cela.
    J'avais par ailleurs eu (un jour fort fort lointain ) un problème avec une classe nommée identiquement à quelque chose dans un header.
    C'était au cas où.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/03/2007, 10h23
  2. [amfPhp] Déclaration de classe dans un package
    Par luta dans le forum Dynamique
    Réponses: 6
    Dernier message: 27/09/2006, 16h37
  3. Déclaration de classe
    Par EntraX666 dans le forum Langage
    Réponses: 5
    Dernier message: 29/10/2005, 10h49
  4. Déclaration de classes et méthodes externes
    Par rulianf dans le forum C++
    Réponses: 6
    Dernier message: 15/09/2005, 15h26
  5. Réponses: 5
    Dernier message: 10/11/2004, 19h44

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