CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++-std::map erreur: discards qualifiers

rangerprice
rangerprice
Niveau 10
12 novembre 2014 à 22:20:41

:salut:

J'ai conçu un tableau associatif de type map dont voici le prototype:

:d) std::map<QString, QFile*> files;

Lorsque j'ajoute une entrée au tableau, tout se passe bien. Mais lorsque je tente d'accéder à un élément du tableau, ex:

:d) QFile* file = files[fileName]; // fileName est un objet QString

Alors là c'est la catastrophe :hap:
mon compilateur me dit:

erreur : passing 'const std::map<QString, QFile*>' as 'this' argument of 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = QString; _Tp = QFile*; _Compare = std::less<QString>; _Alloc = std::allocator<std::pair<const QString, QFile*> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = QFile*; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = QString]' discards qualifiers [-fpermissive]

J'ai absolument rien compris de cette érreur. J'ai fais de longue recherche sur google mais en vin, je suis dans la panade :hap:

Ma question est: Que signifie cette erreur et comment la corrigé :hap:

Si vous m'aidez, je vous en serais très reconnaissant :hap:

Pseudo supprimé
Pseudo supprimé 12 novembre 2014 à 22:22:48

"const std::map<QString, QFile*>"

Y a un const là..

rangerprice
rangerprice
Niveau 10
13 novembre 2014 à 00:31:08

:d) QString const fileName = index.data().toString();
:d) QFile* file = files[fileName];

mais même si j'enlève le const dans cette partie de mon code, il y a toujours l'erreur :(

rangerprice
rangerprice
Niveau 10
13 novembre 2014 à 00:47:55

+ je tiens à préciser qu'il n'y a pas de const dans le prototype:

godrik
godrik
Niveau 30
13 novembre 2014 à 03:04:50

donne du code complet. La on ne voit rien de ce qu'il se passe vraiment.

rangerprice
rangerprice
Niveau 10
13 novembre 2014 à 16:52:32

J'ai deux fichier: WaterText.h et WaterText.cpp

WaterText.h :d) http://pastebin.com/292TQcYE
WaterText.cpp :d) http://pastebin.com/1EQ2Knsq

Dans WaterText.h il y a le prototype du tableau associatif
Dans WaterText.cpp il y a le code de deux fonctions, dans lesquelles j'utilise le tableau associatif.

Aucune erreur n'est déclaré au niveau de la fonction loadFile().
Mon compilateur signale une erreur à la ligne 11 de WaterText.cpp

Cette erreur est:

erreur : passing 'const std::map<QString, QFile*>' as 'this' argument of 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = QString; _Tp = QFile*; _Compare = std::less<QString>; _Alloc = std::allocator<std::pair<const QString, QFile*> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = QFile*; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = QString]' discards qualifiers [-fpermissive]

:d) Que signifie cette erreur, et comment la corrigé :hap:

godrik
godrik
Niveau 30
13 novembre 2014 à 18:25:51

La fonction "void WaterText::getFileByIndex(QModelIndex index) const" est const. Donc la std::map est const pour le scope de cette fonction. Il te faut utiliser

const QFile* file = files[fileName];

rangerprice
rangerprice
Niveau 10
13 novembre 2014 à 19:33:16

Merci Godrik. Mon compilateur n'indique plus d'erreur grâce à toi :hap:
J'ai fais comme tu as dis mais l'érreur persistait alors par tout hasard j'ai enlevé le mot clé const de la fonction et là le compilateur disait rien :hap:

...Seulement j'ai un nouveau problème maintenant :hap:

Quand j'éxécute cette fonction, mon application crash et j'ai une érreur "WaterText a planté"

Je suis presque sur que ça a un rapport avec mon tableau le fait qu'il a planté parce que quand j'ai enlevé cette ligne:
:d) QFile* file = files[fileName];
le programme n'a pas planté. :(

:-(

rangerprice
rangerprice
Niveau 10
13 novembre 2014 à 22:44:36

C'est bizarre, mais des que j'essaye d'accéder à un élément du tableau, mon programme plante. :(

HELP !! :-(

rangerprice
rangerprice
Niveau 10
14 novembre 2014 à 00:26:23

Quand j'y pense, le problème de crash vient peut-être de la mémoire. Vu que c'est un tableau de pointeur qui ne sont pas détruit mais garder et stocker dans un tableau.

Peut-être qu'à un moment l'espace alloué à mon programme a dépassé la quantité de mémoire vive que j'ai et donc à fais crasher le programme. :(

Vous connaissez un outils/algorithme me permettant de calculer la quantité de mémoire qu'utilise mon programme ?

rangerprice
rangerprice
Niveau 10
15 novembre 2014 à 01:50:29

J'ai trouvé l'erreur, après tant de dur labeur :fete:

C'étais mon compilateur qui me disait que c'étais une érreur de type: discards qualifiers mais quand j'ai éxécuté le débugger (c'étais la première fois que je touche à un débugger) j'ai fais quelque manipulation hasardeuse et donc, j'ai éxécuté l'application épaulé par mon débugger. Au moment ou l'application crash, j'ai une boite de dialogue qui s'ouvre avec écrit:
:d) SIGSEGV - segmentation fault

Puis je me dis: "ÇA Y EST, J'AI UNE PUTAIN DE FUCKING PISTE !!!!!"

Je mène alors ma petite enquête, en commençons par google :hap:
je tape dans la barre d'adresse SIGSEGV et là:

"Une erreur de segmentation (en anglais segmentation fault, en abrégé segfault) est un plantage d'une application qui a tenté d'accéder à un emplacement mémoire qui ne lui était pas alloué. "
-http://fr.wikipedia.org/wiki/Erreur_de_segmentati
on

J'ignorais se qu'était une érreur de segmentation à ce moment là, jusqu'à se que j'arrive sur la page wikipédia :hap:
C'est la première fois que je me rapproche autant de la mémoire d'un système d'exploitation. ( c'est se qui arrive quand on attaque du bas niveau :hap: )

Si vous en connaissez d'autre des erreurs discrète qu'on ne remarque pas du premier coup d’oeil, mp moi :hap:

Je pense que je pourrais me débrouiller pour la suite. Merci pour votre aide à tous ! :D :hap:

godrik
godrik
Niveau 30
15 novembre 2014 à 02:01:10

si tu arrives a compiler. Fais tourner le code dans valgrind. Et tu peux vouloir lire ca:

http://erik.deblan.org/blog/index.php?article13/c-que-faire-en-cas-de-segmentation-fault

Pseudo supprimé
Pseudo supprimé 15 novembre 2014 à 07:58:03

Segmentation fault c'est tout sauf discret. Ca doit être l'une des erreurs les plus connues des programmeurs, et l'une de celles qui leur a le plus pourri la vie :noel:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment