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

Langage C++ Discussion :

Question sur void*


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Par défaut Question sur void*
    Bonjour !
    Au risque d'en froisser beaucoup, (deja sur le chat cetais pas gai ^^)

    Voici la fonction que j'aimerais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void WidgetFactory::call(void* widget)
    {
        // cherche dans _callback si key = widget
        // func();
    }
    Dans la classe WidgetFactory, j'ai ceci
    une map qui contient des pointeurs vers des fonctions, en revanche, comme je ne peux pas mettre un string pour la key, je pars sur un void*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    map<void* /* key */, void* /* func */> _callback;
    J'ai tenté a tout hasard

    _callback[widget]();
    et ensuite
    _callback.find(widget)();

    Aucun des deux marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    D:\C++\projects\Client v2\Factories\WidgetFactory.cpp|20|error: '((WidgetFactory*)this)->WidgetFactory::_callback.std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = void*, _Tp = void*, _Compare = std::less<void*>, _Alloc = std::allocator<std::pair<void* const, void*> >](((void* const&)((void* const*)(& widget)))).std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<void* const, void*>]()->std::pair<void* const, void*>::second' cannot be used as a function|
    Un cookie pour celui qui trouve l'erreur x)
    merci, bonne nuit ^^

  2. #2
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    C'est terrible les têtes de mules

    Ils ont du t'expliquer sur le tchat pourquoi void* c'était le mal. Alors si tu as envie de mettre ça en clé dans une map, oublie et comprend comment fonctionne une map plutôt que de te contenter de contourner l'erreur de compilation pour générer des conneries à l'exécution.

    Ensuite, plutôt que de t'obstiner avec les void* qui te mèneront dans le mur même si ça compile, apprend à te servir des méthodes virtuelles.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    étant en C++, l'utilisation du void* est quasi inutile et toujours évitable. Au profit d'interface et méthodes virtuelles, comme indiqué ci-dessus.
    Si tu veux malgré tout utilisé un void comme valeur, tu devras obligatoirement le caster, surtout pour utiliser l'opérateur ()..
    Par contre vouloir utiliser un void* comme clé, je ne trouve pas de mot pour exprimer à quel point ça me semble stupide.

    ::second' cannot be used as a function
    Et tu as de la chance, le message est on ne peut plus clair.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Décidément, c'est de pire en pire...
    On était parti sur le chat d'un super objet parent à boost::any puis à void* puis maintenant à un void* comme clé dans une map

    Tu essaies de faire les choses à ton idée, sans te préoccuper des spécificités du langages et comment il faudrait faire les choses correctement. Le C++ est un langage très permissif qui va pas compenser les erreurs des développeurs. Programmer n'importe comment peut peut-être fonctionner sur d'autres langages mais pas en C++. Je t'ai donné également un lien vers le blog d'Emanuel Deloget pour que tu puisses comprendre pourquoi les super objets ne sont pas la meilleure solution. Mais 2 pages, c'est trop à lire ?

    Mon conseil : arrête le C++
    Tu finiras dégoûté dans quelques temps parce que tu n'arrives pas à faire ce que tu veux et quand ça fonctionne (de temps en temps), ça t'a pris 2 jours pour faire 3 lignes de code. Tu finiras par passer à autre chose en pensant que le C++ est un langage trop compliqué, inefficace, bugé, non productif, etc.

  5. #5
    Membre très actif
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Par défaut
    Pas de fonctions pour :: second?
    Jai vu une source qui lutilisait!
    Bon je vais changer mon code plus tard en utilisant un string, void*
    cette solution marche bien
    Je vais jeter un coup doeils aux fonctions virtuelles a loccasion egalement.
    Ensuite petit coup de gueule pour gb.
    Je trouve vraiment dommage, avec tout le respet que jai pour les gens comme toi qui aident les debutant ou pas a avancer dans leurs codes, que tu sois obliger de me lincher inutilement et de me conseiller darreter le c++.
    Je programme pour le plaisir, quand jai du temps. Mon job et ma vie personnelle me pompent deja 9/10 de mes semaines. Bref.
    De plus, dans mon metier letraide est la cle de la reussite, ainsi que des expliquations imagees.
    Si mon apprenti me demande comment faire une pate brisee professionnelle, je vais pas lui dire va lire le bouquin sur la conception des pates par mr. Chef-x. Non je vais lui expliquer les ingredients, a quoi ils servent, commet melanger. Et surtout, je vais lui montrer!
    Je vois pas linteret de me linker un blog ou le mec philosophe sur des patrons de conceptions alors que jai deja un peu de mal a dechifrer un code.
    Et oui jai pas lu entierement les pages, si je nai pas un exemple concret, je ne comprendrais pas.
    Si tu veux tu viens dans mon domaine, et on va voir comment tu vas reagir quand tu vas me demande comment faire un truc et que jvais te dire de te debrouiller avec un livre.
    Tu as une connaissance immense, je suis novice, jen fais qua ma tete, ces normal.
    Si tu compte pas maider alors essaye meme pas de repondre, cest simple.
    Ceci dit, merci quand meme pour les messages avant ce dernier.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Si je me mets à faire de la cuisine et remplacer le sel par du sucre dans une recette donnée, que l'on me dit que c'est pas la bonne méthode et que je m'enterre à cette pratique... il ne faut pas venir se plaindre de la personne qui m'a prévenu.

    N'en déplaise à certains, mais programmeur c'est aussi un vrai métier. Même si tout le monde est susceptible de pouvoir faire un hello world dans son coin..

    Apparemment ils ont déjà eu cette discussion avec toi sur le chat, je vois pas à quel genre de réponse tu t'attendais en postant la même question sur le forum cette fois ?

    Si tu n'acceptes pas les réponses et continues à n'en faire qu'à ta tête en ignorant les solutions des personnes dont c'est le métier, et qu'en plus tu te plains de leurs réponses, je vois pas ce qu'on peut pour toi...
    Ici c'est un forum communautaire et tous sont bénévoles, nous ne proposerons quasiment jamais de code tout fait ou d'exemples entiers.
    Le net regorge de ces codes bateau, que l'on voit souvent ressurgir ici accompagné du fameux "ce code marche sur le site mais pas chez moi", après un copier/coller d'un morceau de code qui
    - est vieux de 30 ans et obsolète 3 fois
    - est incomplet parce qu'il manque un morceau jugé inutile par l'utilisateur qui l'a copié
    - est de toute évidence tiré d'un exemple de "code à ne pas reproduire", mais comme c'était sur un site anglais, il n'a pas pris le temps de le lire
    Pas de fonctions pour :: second?
    Jai vu une source qui lutilisait!
    Choisis ton camp parmi les 3 ci-dessus.

    Oui "Google is your friend" est une vraie réponse dans des cas triviaux, on peut aussi employer la version plus ancienne "aide-toi et le ciel t'aidera".

    Je suis très heureux pour toi que tu saches faire des pâtes brisées, mais à priori c'est pas le sujet du site.

    Je vois pas linteret de me linker un blog ou le mec philosophe sur des patrons de conceptions alors que jai deja un peu de mal a dechifrer un code.
    Et oui jai pas lu entierement les pages, si je nai pas un exemple concret, je ne comprendrais pas.
    Apprends à marcher avant de courir.
    Je dirais aussi, apprendre à faire du vélo avec les roulettes avant de faire le tour de France. Mais si l'on te présente le vélo, il ne faut pas attendre qu'on pédale à ta place.

    je suis novice, jen fais qua ma tete, ces normal.
    Je ne vois aucune relation de cause à effet là-dedans.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. question sur le type "void *"
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 4
    Dernier message: 10/02/2006, 11h27
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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