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 :

Visual Studio problème avec le fichier utility


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut Visual Studio problème avec le fichier utility
    Bonjour,

    Il existe un fichier nommé utility dans un sous-dossier de VS.
    Je ne l'ai pas appellé, il est donc appellé par d'autres fichiers.
    Et malheureusement, à la compilation, ce fichier contient des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pair& operator=(pair<_Ty1, _Ty2>&& _Right)
    { // assign from moved pair
    this->first = _STD move(_Right.first);
    this->second = _STD move(_Right.second);
    return (*this);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     error C2106: '=' : left operand must be l-value
    Alors je me suis dit, j'ai du mal configurer quelque chose.
    Est-ce que quelqu'un saurait comment résoudre ce problème?
    merci
    raphchar

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Bonjour.

    <utility> est un fichier de la std. je t'assure qu'il n'est pas bugué.

    dans ton cas, le problème vient du fait que std::pair est un template et donc que les types utilisés peuvent êtres invalides avec les opérateur censés être fournis par les classes passées en paramètres templates.

    En l'occurence il semble que tu utilise visual 2010 et une implémentation C++0x. il semble qu'il y ait confusion entre rvalue et lvalue.

    Pourrais-tu nous donner la pile complète des appels histoire que l'on voie d'où cela vient ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Je me doute bien que utility n'est pas buggé

    Citation Envoyé par méphistopheles Voir le message
    En l'occurence il semble que tu utilise visual 2010 et une implémentation C++0x. ?
    Non je n'utilise pas c++0x

    Citation Envoyé par méphistopheles Voir le message
    Pourrais-tu nous donner la pile complète des appels histoire que l'on voie d'où cela vient ?
    Ce n'est pas du débuggage donc, pas de pile d'appel.

    Peut-être le problème vient-il de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vec2f & operator=(const vec2f & src) { x=src.x; y=src.y; return *this; } 
    vec3f & operator= ( const vec3f & src ) { x=src.x; y=src.y; z=src.z; return *this; }

  4. #4
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par raphchar Voir le message
    Ce n'est pas du débuggage donc, pas de pile d'appel.
    Lorsque le compilateur cherche à compiler, il regarde d'abord les sources, essaye de les compiler, et si un template est par exemple instancié dedans, il va lire la déclaration du template, essayer de la compiler, etc... jusqu'à ce que tous les types soits résolu ou qu'il y ait un erreur. S'il n'y a pas d'appel eu sens runtime du terme, j'entend par la, la trace de ton compilo jusqu'au fichier incluant le header et instanciant ton pair.

    Citation Envoyé par raphchar Voir le message
    Peut-être le problème vient-il de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vec2f & operator=(const vec2f & src) { x=src.x; y=src.y; return *this; } 
    vec3f & operator= ( const vec3f & src ) { x=src.x; y=src.y; z=src.z; return *this; }
    je ne vois pas pourquoi, ce genre de code n'a pas de raison de ne pas marcher.

    Par contre,
    Citation Envoyé par raphchar Voir le message
    Non je n'utilise pas c++0x
    peut être mais le code que tu montre en exemple utilise du c++0x (ou alors y'a encore un truc que j'ai loupé dans la norme précédente ) : dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pair& operator=(pair<_Ty1, _Ty2>&& _Right)
    "&&" désigne un objet passé par rvalue... et à ma conaissance, seul le c++0x (TR1 c++11 et compagnie) définissent la rvalue.
    Ensuite, je sais qu'il y a des histoires un peu compliquées sur la transformation de lvalue en rvalue et c'est probablement de là que vient ton erreur.

    Je vais voir si je peux trouver plus d'information à ce sujet.

    bonne chance

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Donc il faut que je mette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vec2f  operator=(const vec2f  src) {vec2f res; res.x=src.x; res.y=src.y; return res; }
    Et ca devrait marcher?
    J'essaie

  6. #6
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    T'as un switch 0x activé c'est obligé. Car les parties du codes avec des rvalue ref sont entouré par des #define. Quel visual studio?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Peut être il y a un mix dans les options de compil qui font que certaines parties sont compilées en C++03 et d'autres en C++0X (cela implique la présence de 2 versions de visual, la 2010 et une 2008).

    Citation Envoyé par raphchar Voir le message
    Peut-être le problème vient-il de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vec2f & operator=(const vec2f & src) { x=src.x; y=src.y; return *this; } 
    vec3f & operator= ( const vec3f & src ) { x=src.x; y=src.y; z=src.z; return *this; }
    Si ton opérateur= est aussi trivial, alors pourquoi le redéfinir ? Le compilateur génère exactement le même.

  8. #8
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Peut être il y a un mix dans les options de compil qui font que certaines parties sont compilées en C++03 et d'autres en C++0X (cela implique la présence de 2 versions de visual, la 2010 et une 2008).

    Si ton opérateur= est aussi trivial, alors pourquoi le redéfinir ? Le compilateur génère exactement le même.
    Il y a effectivement des "restes" de vs2008.
    Oui effectivement l'opérateur= est redéfini (sans doute n'est-il pas utile) (Mais à l'origine, ce n'est pas mon code, mais un code que j'adapte pour windows, d'où tout mes soucis)

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par raphchar Voir le message
    Mais à l'origine, ce n'est pas mon code, mais un code que j'adapte pour windows, d'où tout mes soucis
    Simplifier le code en enlevant les parties 'inutiles' ne pourra que faciliter ton portage.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2016, 14h26
  2. [pthreads w32][visual studio] problème d'édition de lien avec la librairie static
    Par Yruama_Lairba dans le forum Bibliothèques, systèmes et outils
    Réponses: 2
    Dernier message: 13/08/2014, 21h03
  3. Problème MS Visual Studio 2010 avec MS SQL Server
    Par nadjibnet dans le forum ADO.NET
    Réponses: 0
    Dernier message: 18/12/2010, 15h30
  4. Réponses: 0
    Dernier message: 01/03/2009, 14h44
  5. Publier dans visual studio(problème avec powerpack)
    Par sasuke_ochiwa dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/09/2007, 16h51

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