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

Qt Discussion :

passing 'const QString' as 'this' argument of 'QString& QString::operator=(const QStr


Sujet :

Qt

  1. #1
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut passing 'const QString' as 'this' argument of 'QString& QString::operator=(const QStr
    Bonjour, j'ai un probléme sur ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QStringList env=theApplication->environment();
    	//remove the value and add to path
    	for (int i = 0; i < env.size(); ++i) {
    		if(env.at(i).startsWith("QMAKESPEC="))
    			env.removeAt(i);
    		if(env.at(i).startsWith("QTDIR="))
    			env.removeAt(i);
    		if(env.at(i).startsWith("PATH="))
    		//QString(';')+QtAbsolutePath+QDir::separator()+"bin;"+MingwAbsolutePath+QDir::separator()+"bin"
    			env.at(i)=QString("test");
    	}
    Il me fait:
    passing 'const QString' as 'this' argument of 'QString& QString::operator=(const QString&)' discards qualifiers
    Alors que je n'est aucun const, ou est mon erreur et d'ou proviens elle?
    Merci d'avance.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par alpha_one_x86 Voir le message
    Alors que je n'est aucun const, ou est mon erreur et d'ou proviens elle?
    comme le dit la doc at() retourne une refrence const
    http://qt.developpez.com/doc/4.4/qlist/#at

    et tes test/traitement sur la QStringList est très très très dangereuse ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        if(env.at(i).startsWith("QMAKESPEC="))
            env.removeAt(i);
     
        if(env.at(i).startsWith("QTDIR="))
            env.removeAt(i);
     
        if(env.at(i).startsWith("PATH="))
    	env.at(i)=QString("test");
    exemple 1:
    • i = env.size() -1.
    • env.at(i).startsWith("QMAKESPEC=") == true => env.removeAt(i);
    • i est devenue un indice invalide => env.at(i).startsWith("QTDIR=") => exception ou crash


    exemple 2 :
    • env.at(i).startsWith("QMAKESPEC=") == false
    • env.at(i).startsWith("QTDIR=")) == true => env.removeAt(i); seulement le nouvelle élément en i commence par QMAKESPEC
    • i++ => tu na pas viré l'argument commençant par QMAKESPEC

  3. #3
    Membre régulier
    Avatar de alpha_one_x86
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 411
    Points : 113
    Points
    113
    Par défaut
    Alors comment quand même faire cette modification?
    J'ai utilisé des [] ça à l'aire de marcher.
    Voila le nouveau code que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	for (int i = 0; i < env.size(); ++i) {
    		if(env.at(i).startsWith("QMAKESPEC=") || env.at(i).startsWith("QTDIR="))
    		{
    			i--;
    			env.removeAt(i);
    		}
    		if(env.at(i).startsWith("PATH="))
    			env[i]=QString(';')+QtAbsolutePath+QDir::separator()+"bin;"+MingwAbsolutePath+QDir::separator()+"bin";
    	}
    ça m'as l'aire d'étre bon, tu en pense quoi?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i--;
    env.removeAt(i);

    et tu pense virer quoi !!!!

    en utilisant les iterator et avec ce que j'ai compris, je ferais un truc comme :

    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
    QStringList env=theApplication->environment();
    QStringList ::iterator it = env.begin();
     
    while (it != env.end());
    {
       if( it->startsWith("QMAKESPEC=") ||  it->startsWith("QTDIR="))
       {
           it = env.erase(it);
       }
       else if ( it->startsWith("PATH=") 
       {
          *it += QString(';') 
                    + QtAbsolutePath + QDir::separator() + "bin;"
                    + MingwAbsolutePath + QDir::separator() + "bin";
     
           ++it;
       }
       else
       {
           ++it;
       }
    }

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/10/2013, 13h05
  2. Réponses: 20
    Dernier message: 16/11/2009, 23h04
  3. Réponses: 2
    Dernier message: 20/02/2008, 14h32
  4. const Point & et this
    Par vincho dans le forum C++
    Réponses: 9
    Dernier message: 01/03/2007, 17h45
  5. Réponses: 3
    Dernier message: 04/12/2006, 13h01

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