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 :

Type non défini (void*)


Sujet :

C++

  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut Type non défini (void*)
    Bonsoir à tous,
    Le débutant que je suis a une question à vous soumettre.
    Je vais la faire concise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int UnEntier = 9;
     
    void* PObject;
    int * PEntier;
     
    PObject = &UnEntier;
    PEntier = &UnEntier;
     
    std::cout << "PObject : " << *PObject << "\n";
    std::cout << "PEntier : " << *PEntier << "\n";
    j’ai une erreur de compilation sur l’avant dernière ligne (le ‘*’ devant ‘PObjet’ il n’aime pas du tout).
    Visiblement je ne peut pas acceder à la valeur contenu dans l’adresse pointé par PObject, sous pretexte que ce dernier est déclaré comme étant ‘void*’ (avec un type défini ça fonctionne).
    Donc, y a-t-il un moyen de contourner ceci ?

    (j’ai essayé une approche à grand coup de reinterpret_cast mais ça n’a rien donné).

  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 I_Pnose Voir le message
    (j’ai essayé une approche à grand coup de reinterpret_cast mais ça n’a rien donné).
    bonjour,
    ?? pourrai tu mettre ce bout de code??
    Voici un lien sur les cast
    http://cpp.developpez.com/faq/cpp/?p...s#DIVERS_casts

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    j’ai une erreur de compilation sur l’avant dernière ligne (le ‘*’ devant ‘PObjet’ il n’aime pas du tout).
    Visiblement je ne peut pas acceder à la valeur contenu dans l’adresse pointé par PObject, sous pretexte que ce dernier est déclaré comme étant ‘void*’ (avec un type défini ça fonctionne).
    Donc, y a-t-il un moyen de contourner ceci ?
    Non. Déréférencer un void* n'a pas de sens, d'où l'erreur.
    En effet, déréférencer un T* donne un T. Que devrait donner le déréfencement d'un void* ?

  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
    Citation Envoyé par loufoque Voir le message
    Non. Déréférencer un void* n'a pas de sens, d'où l'erreur.
    En effet, déréférencer un T* donne un T. Que devrait donner le déréfencement d'un void* ?
    et oui avec un cast, non?
    mais faut faire attention au cast impossible

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    bonjour,
    ?? pourrai tu mettre ce bout de code??
    Voici un lien sur les cast
    http://cpp.developpez.com/faq/cpp/?p...s#DIVERS_casts
    Le bout de code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	void* Objet;
     
    	int Entier = 12;
     
    	Objet = reinterpret_cast<void* &>(Entier);
     
    	std::cout << Objet << "\n";
    en sortie j'obtiens 0000000C, soit mon 'Entier' en hexa.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Fiu,
    Citation Envoyé par I_Pnose Voir le message
    Le bout de code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	void* Objet;
     
    	int Entier = 12;
     
    	Objet = reinterpret_cast<void* &>(Entier);
     
    	std::cout << Objet << "\n";
    en sortie j'obtiens 0000000C, soit mon 'Entier' en hexa.
    Vérifie bien la ligne de ton cast, et tu comprendras.

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Citation Envoyé par droggo Voir le message
    Fiu,

    Vérifie bien la ligne de ton cast, et tu comprendras.
    Tu fais allusion au ‘&’ dans mon cast ? c’est un reliquat de test hasardeux pour vérifier si un concept m’aurait échappé. Si je le vire, c’est la même punition… je trouve ça bête de bloquer sur un truc qui parait aussi tarte ^^.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    J'avais bien dit que c'était tarte...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void* Objet;
     
    int Entier = 14;
    Objet = &Entier;
     
    int sortie = *((int*)Objet);
     
    std::cout << sortie;

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Sauf qu'en C++, surtout quand on joue avec des pointeurs, il ne faut pas jouer avec des casts C-Style.
    Utiliser un static_cast<> à la place.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void* pObjet;
     
    int Entier = 14;
    pObjet = &Entier;
     
    int sortie = *static_cast<int*>(pObjet);
    std::cout << sortie;

    Ou plus long, mais plus compréhensible:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void* pObjet;
     
    int Entier = 14;
    pObjet = &Entier;
     
    int *pSortie = static_cast<int*>(pObjet);
    int sortie = *pSortie;
    std::cout << sortie;

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sauf qu'en C++, surtout quand on joue avec des pointeurs, il ne faut pas jouer avec des casts C-Style.
    Utiliser un static_cast<> à la place.
    Ok. C'est un reflexe à prendre.
    (j'ai pas mal d'automatisme du C à eradiquer )

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

Discussions similaires

  1. [VBA] Type non défini par l'utilisateur.
    Par ip203 dans le forum Access
    Réponses: 5
    Dernier message: 07/04/2008, 14h38
  2. variable avec un type non défini
    Par gign2585 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/05/2007, 18h10
  3. [DAO]type non défini / recherche valeur max dans un champ
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/04/2007, 09h59
  4. [VB.Net] BC30002 : Type non défini
    Par beowax dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/10/2006, 11h16
  5. [VB.NET] Type non défini quand j'appelle un Windows Form ?
    Par beegees dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2006, 11h12

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