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 :

Autoriser un cast implicite


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut Autoriser un cast implicite
    Bonjour

    Je suis en train de porter une appli vc++ en gcc.

    Dans le code original, j'avais qq chose comme a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int Fonction(void** buffer){
        MonType*   str = *buffer;
    }
    Avec la compilation "nouvelle", j'obtiens une erreur de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: invalid conversion from `void*' to `MonType*'
    Je suis obligé de caster explicitement de la façon suivante pour obtenir
    la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int Fonction(void** buffer){
        MonType*   str = (MonType*) *buffer;
    }
    Existe-t-il une directive pour éviter d'avoir à faire cette modification ?

    Merci
    Julien

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par qdaemon_fr Voir le message
    Existe-t-il une directive pour éviter d'avoir à faire cette modification ?
    Compile en C et non en C++.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Citation Envoyé par gl Voir le message
    Compile en C et non en C++.
    Ok, ça gaze.

    merci à tous de vos réponses.

    Julien

  4. #4
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Bonjour,

    Je ne pense pas non.
    Sachant que tu as pointeurs avec des types différents, il me semble que le cast reste l'unique solution (mais je ne suis pas non plus un expert ).
    Cependant il me semble bien qu'il n'est pas possible d'utiliser un pointeur sur void avant de l'avoir caster pour qu'il pointe vers un autre type.

    A confirmer.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par ZnhaarX Voir le message
    Sachant que tu as pointeurs avec des types différents, il me semble que le cast reste l'unique solution (mais je ne suis pas non plus un expert ).
    En C, les casts entre void* et un autre type de pointeur sont implicites.

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Si l'extension du fichier source est en .c et que tu compiles avec gcc (et non g++), il ne devrait pas y avoir de problème et le cast implicite (void *) vers tout autre type de pointeur est accepté. Assure doit donc que tu utilises bel et bien le compilateur C de la suite gcc et cela va passer sans cast.

    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 26/03/2014, 10h51
  2. Meta-programation, template et cast implicite
    Par Awakening dans le forum C++
    Réponses: 15
    Dernier message: 10/02/2012, 19h03
  3. probleme de cast implicite : byte.
    Par giova_fr dans le forum C#
    Réponses: 1
    Dernier message: 20/01/2011, 13h28
  4. Conversion cast implicite et mot clef "explicit"
    Par nikopol82 dans le forum Langage
    Réponses: 7
    Dernier message: 08/11/2009, 20h07
  5. [C#] Cast implicite inexistant ?
    Par ekinox17 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/04/2006, 11h07

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