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 :

probleme de typage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut probleme de typage
    bonjour,

    je crée ici un tableau de int à 2 dimensions :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    void creerTab(FILE *fp, char *c, int **tab, int nbCol)
    {
    	int i = 0;
     
    	while(fgets(c, BUFSIZ, fp) != NULL)
    	{
    		char *pointeur;
    		char *separateur = { " " }; // Le séparateur
    		int j = 0;
    		int n;
     
    		pointeur = strtok(c, separateur);
     
    		sscanf(pointeur, "%d", &n);
    		tab[i][j] = n;
    		//printf("i = %d et j = %d\n",i,j);
    		//printf("%d\n",tab[i][j]);
     
    		while( pointeur != NULL && j < nbCol-1)
    		{
    			// Cherche les autres separateur
    			pointeur = strtok( NULL, separateur );
     
    			if ( pointeur != NULL )
    			{
    				j++; // increment du nombre de mot
    				sscanf(pointeur, "%d", &n);
    				tab[i][j] = n;
    				//printf("i = %d et j = %d\n",i,j);
    				//printf("%d\n",tab[i][j]);				
    			}
    		}
    		i++;
    	}
    }
    voici comment je l'appelle dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int tab[nbLignes][nbColonnes];
    creerTab(f, chaine, tab, nbColonnes);
    et voici l'erreur qui m'est suggéré à la compilation :

    pssing argument 3 of 'creerTab' from incompatible pointer type
    expected 'int**' but argument is of type 'int(*)[(unsigned int)(nbColonnes)]'

    quelqu'un pourrait-il m'expliquer mon erreur ??

    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Parait-il que parfois, mélanger les notations ne plait pas au compilateur... Essaye de changer le prototype de ta fonction en utilisant tab[][] . Sinon je ne vois pas désolé!

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    non ça ne marche pas
    merci quand meme
    l'erreur indiquée est array type has incomplete element type

    personne d'autre ne saurait m'indiquer comment faire ??!!

  4. #4
    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 guigz57 Voir le message
    non ça ne marche pas
    merci quand meme
    l'erreur indiquée est array type has incomplete element type

    personne d'autre ne saurait m'indiquer comment faire ??!!
    creerTab attend un int** mais tu lui passe un int [nbLignes][nbColonnes], les deux types ne sont pas les mêmes et il n'y a pas de conversion implicite qui s'applique ici [1].

    Utilises le bon type pour le paramètre (int tab[nbLignes][nbColonnes] ou int(*tab)[nbColonnes]).




    [1] lors du passage de paramètre, le nom du tableau correspond certes à l'adresse de sont premier élément, mais le type du premier élément de tab n'est pas int* mais int[nbColonnes]

  5. #5
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    tu vas dire que je ne comprends vraiment rien (et tu aurais bien raison !!)

    mais j'ai cru faire ce que tu m'as conseillé en passant un int tab[nbLignes][nbColonnes] comme parametre à ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void creerTab(int nbL, int nbC, int tab[nbL][nbC])
    {
    	int i = 0;
    	int j = 0;
    	for(i ; i < nbL ; i++)
    	{
    		j = 0;
    		for(j ; j < nbC ; j++)
    		{
    			tab[i][j] = 0;
    			printf("tab[%d][%d] = %d\n", i, j, tab[i][j]);
    		}
    	}
    }
    je l'appelle comme ceci dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int tab[nbLignes][nbColonnes];
    creerTab(nbLignes, nbColonnes, tab[nbLignes][nbColonnes]);
    à savoir que nbLignes et nbColonnes sont bien des int

    et j'obtient l'erreur :
    passing argument 3 of 'creerTab' makes pointer from integer without a cast
    expected 'int(*)[<U cb8> + 1u] but argument is of type 'int'

    alors que si je fais directement dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int i = 0;
    int j = 0;
    for(i ; i < nbLignes ; i++)
    {
    	j = 0;
    	for(j ; j < nbColonnes ; j++)
    	{
    		tab[i][j] = 0;
    		printf("tab[%d][%d] = %d\n", i, j, tab[i][j]);
    	}
    }
    il n'y a pas de soucis ...

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creerTab(nbLignes, nbColonnes, tab[nbLignes][nbColonnes]);
    Dans ce cas, tu passes un "élément" du tableau, soit un int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creerTab(nbLignes, nbColonnes, tab);

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

Discussions similaires

  1. Probleme de typage en C++
    Par xxiemeciel dans le forum C++
    Réponses: 3
    Dernier message: 30/09/2008, 18h25
  2. probleme de typage lors de la deserialisation
    Par Kuroro dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2007, 18h25
  3. probleme de typage
    Par bogizo dans le forum C++
    Réponses: 2
    Dernier message: 09/05/2007, 09h33
  4. Réponses: 5
    Dernier message: 09/03/2006, 15h00
  5. [FLASH 8] probleme de typage d'entier
    Par dom_dev dans le forum Flash
    Réponses: 1
    Dernier message: 08/03/2006, 15h52

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