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

Boost C++ Discussion :

[Débutant] boost::thread non-lvalue


Sujet :

Boost C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut [Débutant] boost::thread non-lvalue
    Je viens tout juste de réussir à installer boost (enfin je crois) et mon premier programme test bugge :
    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
    #include <iostream>
    #include <boost/thread/thread.hpp>
    #include "fmod.h"
     
    using namespace std;
     
    int play_sound();
    bool init_fmod();
     
    int main()
    {
    	cout << "Hello world!" << endl;
    	boost::thread mon_thread(&play_sound());
    	system("pause");
    	return 0;
    }
     
     
    bool init_fmod()
    {
    ...
    }
     
    int play_sound()
    {
         if(init_fmod() == false) return 1;
     
         FSOUND_SAMPLE *monSon; 
     
         monSon = FSOUND_Sample_Load(FSOUND_FREE, "son.wav", 0, 0, 0);
     
         if(!monSon)
         {
             cout << "Erreur : son non valide : " << FMOD_ERRORS(FSOUND_GetError()) << endl;
         }else{
             FSOUND_PlaySound(FSOUND_FREE, monSon);
         }
     
         return 0;
    }
    Le compilateur me renvoie l'erreur :
    error : non-lvalue in unary '&'
    L'erreur vient-elle du code ou de l'installation de boost ?

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    du code :
    boost::thread mon_thread(play_sound)
    On passe un pointeur sur la fonction, pas le résultat de l'appel à la fonction.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Je comprend mais lorsque j'enlève les parenthèses j'ai droit à une erreur du linker
    Linking console executable: C:\Programmation\CPP\Codes\test thread\console.exe
    .objs\main.o:main.cpp: (.text+0x1bd): undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)'
    .objs\main.o:main.cpp: (.text+0x226): undefined reference to `boost::thread::~thread()'
    .objs\main.o:main.cpp: (.text+0x25c): undefined reference to `boost::thread::~thread()'
    collect2: ld returned 1 exit status

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Faut peut-être ajouter la bibliothèque ? C'est indiqué dans mon tuto sur Boost.Thread qu'il faut ajouter la bibliothèque dans l'édition des liens.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Bon je crois que j'ai un problème avec la compilation de boost :
    Quand j'ajoute à mon projet Code::Blocks la librairie "D:\Boost\lib\boost_thread-mgw-mt.lib" ça compile mais lors du lancement de l'application il me dit qu'il ne trouve pas la dll correspondante. Et effectivement, dans "D:\Boost\lib\" je n'ai qu'une vingtaine de .dll pour environ 200 .lib

    J'ai pourtant rajouter "D:\Program Files\CodeBlocks\bin" et utilisé la ligne de commande suivante pour la compilation de boost
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bjam sMINGW_ROOT_DIRECTORY=D:\Progra~1\CodeBl~1 -sTOOLS=mingw --without-python --prefix=D:\Boost install
    Quelqu'un sait d'où vient le problème ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    ... si il manque la dll c'est parce qu'il faut qu'elle soit situé dans le PATH
    (variable d'environnement)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Si ça ne tenait qu'à moi je mettrais la dll dans le PATH. Le problème c'est qu'elle n'a pas été compilée. Sinon elle se trouverai dans "D:\boost\lib".

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Elle a été compilée, sinon tu n'aurais pas de .lib...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Ok mais en général les .lib et les .dll sont pas loin, non ?

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Peut-être, ça dépend de comment tu as tout compilé.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Excusez-moi.

    Il s'avère, qu'après une courte recherche, les .dll manquantes se trouvaient dans le repertoire ou j'ai décompressé boost (C:/boost/boost1_33_1/bin) et que j'avais allègrement supprimé pensant que se n'étaient que les fichiers d'installation.

    Mais pourquoi une partie des dll à été copiée et pas le reste ?
    Est-ce que je peux les déplacer à la main et supprimer le fameux dossier C:/boost/boost1_33_1/bin pour faire du ménage ?

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Tymk
    Excusez-moi.

    Il s'avère, qu'après une courte recherche, les .dll manquantes se trouvaient dans le repertoire ou j'ai décompressé boost (C:/boost/boost1_33_1/bin) et que j'avais allègrement supprimé pensant que se n'étaient que les fichiers d'installation.

    Mais pourquoi une partie des dll à été copiée et pas le reste ?
    Est-ce que je peux les déplacer à la main et supprimer le fameux dossier C:/boost/boost1_33_1/bin pour faire du ménage ?
    Tout dépend de comment tu as compilé Boost. Tu as utilisé quelle instruction ?

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bjam sMINGW_ROOT_DIRECTORY=D:\Progra~1\CodeBl~1 -sTOOLS=mingw --without-python --prefix=D:\Boost install

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Donc il a tout installé, c'est normal que les dlls soient dans ./bin

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Et du coup si je les déplace ça ira pas ?

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Tymk
    Et du coup si je les déplace ça ira pas ?
    Si, ça ira

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Ok, ça fonctionne. Je n'ai plus qu'a me familiariser avec le threading parce que pour l'instant ça fait pas vraiment ce que veux.

    Je te remercie de ta patience et ton aide précisieuse.

    Tymk

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/03/2010, 23h34
  2. [Débutant] Thread non bloquant
    Par GoustiFruit dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2007, 17h08
  3. Boost thread avec fonction membre non statique.
    Par Klaim dans le forum Boost
    Réponses: 2
    Dernier message: 11/08/2007, 02h58
  4. [Débutant] [Applet] Applet non visible
    Par John Blobsmith dans le forum Applets
    Réponses: 6
    Dernier message: 26/09/2006, 14h25
  5. [Struts][Débutant]Servlet Action non dispo ?
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/04/2004, 08h06

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