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 :

Erreur de types


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut Erreur de types
    Bonsoir,

    je fais pointer p1 de type char[1] vers quelque chose, mais ce quelque chose je veux qu'il soint pointé par p2 aussi qui est déclaré comme char[1] contenu dans structure, elle même dans une union.

    problème dès que je fais l'egalité:

    error: incompatible types when assigning to type ‘unsigned char[1]’ from type ‘char *’|

    merci d'avance

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour dafpp

    Un petit code d'exemple serait plus parlant pour t'aider car j'ai un peu de mal à comprendre tes explications.
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Bonsoir,

    je fais pointer p1 de type char[1] vers quelque chose, mais ce quelque chose je veux qu'il soint pointé par p2 aussi qui est déclaré comme char[1] contenu dans structure, elle même dans une union.

    problème dès que je fais l'egalité:

    error: incompatible types when assigning to type ‘unsigned char[1]’ from type ‘char *’|

    merci d'avance
    bonjour dafpp,

    si je comprend bien tes explications, les déclarations sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char[1] p1
    char[1] p2    // qui est en fait dans une structure, on prendra ici "tastructure" comme nom
    et donc, si j'essaie toujours de comprendre (bpy1401 a raison c'est pas très clair comme sa) tu fait les assignations suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p1=quelquechose // ton quelque chose ciblé par p1
    tastructure.p2=p1 //qui deviens aussi la cible de p2
    ?

    il me semble que sa ressemble vaguement a une histoire de liste chainée tout sa, je t'encourage a poster un bout de code

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    @dafpp

    Déjà, cette phrase est en elle même une erreur :
    je fais pointer p1 de type char[1] vers quelque chose
    p1 dans ce cas est un tableau, pas un pointeur et il est hors de question de faire pointer p1 vers quelque chose. D'ailleurs, tu ne peux pas écrire p1 = quelque chose.

    Fournit le code en cause, au moins les définitions de p1, p2, de la stucture et de l'union ainsi que la ligne de code où il y a cette erreur.

  5. #5
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    Oui je sais que c'est pas possible, c'est pour ça que j'avais pris une variable de type void ** pour récupérer l'adresse de mon p[1], et lui faire pointé sur p2, mais ça revient au même:

    ah, bah je retente ce que je viens de dire et j'ai réussi

    car directement ça veut pas, pourtant ça pointe bien vers une adresse mémoire ? à moins que j'ai mal compris.

    car mon type char p1[1],je l'utilisais avec fread, et ma variable pointé bien vers un nouvel emplacement mémoire, donc faut forcer la main apparement, en récuperant l'adresse du pointeur, et la faire pointer avec cette variable que l'on à créer.

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    je crois que tu devrais te placer du point de vue du compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    char p[1]; 		//p est le symbole d'une adresse fixée par le compilateur
    char * q;			//q est le symbole d'une variable pouvant contenir une adresse
    void main(void){
    	puts("on peut distinguer les adresses des variables");
    	printf("adresse :\n     %p -> %p (valeurs identiques)\n", &p, p);
    	q = p;
    	printf("variable contenant une adresse :\n     %p -> %p (valeurs differentes)\n", &q, q);
    }
    produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    on peut distinguer les adresses des variables
    adresse :
         00402170 -> 00402170 (valeurs identiques)
    variable contenant une adresse :
         00402174 -> 00402170 (valeurs differentes)
    p n'est pas une variable, c'est juste un symbole, presque comme un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define p quelque_chose
    qui se comporte comme une variable qui ne peut pas être affectée (not a lvalue).

    A+

  7. #7
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    on peut dire donc que p n'est pas un pointeur de type char, ni un char, mais toujours un élément une adresse déclaré de type char ?

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

Discussions similaires

  1. [VB]erreur de type
    Par amel95140 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2006, 14h51
  2. Réponses: 1
    Dernier message: 12/12/2005, 03h39
  3. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06
  4. erreur Data type mismatch in criteria expression
    Par bachilbouzouk dans le forum ASP
    Réponses: 3
    Dernier message: 20/04/2005, 11h48
  5. [Agents services] Erreur de types imcompatibles
    Par ApollloCrid dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/04/2005, 19h47

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