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 :

error: incompatible types in assignement


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut error: incompatible types in assignement
    Bonjour à tous !

    Il s'agit d'un TP pour mes cours d'info, je l'ai déjà rendu mais je veux faire autrement que comme j'ai fait *_*

    Ici il y a les définitions de types et mes deux fonctions que je veux améliorer. La première saisiev permet de saisir un vecteur de dimension dim, et la seconde saisiem permet de saisir une matrice de dimension dim*dim.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <math.h>
    #define dim 3
     
    typedef float vect[dim];
    typedef vect mat[dim];
     
    void saisiev(vect u)
    {	int i;
    	for (i=0;i<dim;i++)
    		scanf("%f",&u[i]);
    }
     
    void saisiem(mat m)
    {	int i;
    	vect x;
    	printf("Saisie de la matrice. \n");
    	for (i=0;i<dim;i++)
    {		printf("colonne %d \n",i);
    		saisiev(x);
    		m[i]=x;
    }
    }
    Voilà la version qui ne marche pas. Il m'annonce un problème de compatibilité des types à la ligne
    ---> m[i]=x;
    Quand j'ai fait ce tp j'avais résolu ce problème en définissant mon type mat
    ---> typedef float mat[dim][dim]
    Et fait tous les changements nécessaires dans mon programme.

    Mais je tiens vraiment à ce que mon programme considère le type mat comme un tableau d'une dimension contenant des variables de mon type vect. Comment est-ce que je dois faire ?

    Ou bien ai-je mal compris le problème et est-ce que c'est un problème dans ma fonction saisiem ou dans ma syntaxe ?

    Merci d'avance pour vos réponses !
    Je reste dans le coin :o

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    m[i] est du type vect comme x, mais vect est un type tableau. Or il est impossible d'écrire tableau = quelque_chose : l'opérateur = n'est pas défini pour les tableaux.

    Solution possible ici : supprimer l'intermédiaire x :

  3. #3
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    Tu ne peux directement recopier un tableau en utilisant l'assignement "=" comme tu le fais ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void saisiem(mat m)
    {	
            int i;
            vect x;
            printf("Saisie de la matrice. \n");
            for (i=0;i<dim;i++) {
                    printf("colonne %d \n",i);
    		saisiev(x);
    		m[i]=x;
          }
    }
    Si tu veux recopier un tableau, tu dois le faire à la main, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (j = 0; j < dim; j++) {
       m[i][j] = x[i];
    }
    ou bien en utilisant la fonction memcpy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(m[i], x,  sizeof(vect));

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses très rapides !

    Je ne savais pas pour l'opérateur =, j'ai donc supprimé l'intermédiaire x (mais pourquoi j'y ai pas pensé avant T_T).
    Et je vais regarder de plus près ce que c'est que la fonction memcpy que je ne connais pas.

    Merci à vous deux et à bientôt !

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

Discussions similaires

  1. error: incompatible types when assigning
    Par quentinb56 dans le forum C
    Réponses: 2
    Dernier message: 05/12/2013, 20h31
  2. error: incompatible types in assignment
    Par Ganondorf dans le forum Débuter
    Réponses: 6
    Dernier message: 16/09/2010, 16h04
  3. Réponses: 4
    Dernier message: 25/02/2010, 17h14
  4. error: incompatible types in assignment
    Par panda31 dans le forum C
    Réponses: 2
    Dernier message: 13/06/2006, 10h46
  5. Réponses: 4
    Dernier message: 05/12/2005, 19h24

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