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 niveaux d'indirection (error C2040)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut Probleme de niveaux d'indirection (error C2040)
    Bonjour,

    J'ai créé une fonction pour transformer une image d'ImageMagick en tableau 2 dimensions. Les lignes de cette fonction sont fournies ci apres. Malheureusement, celui ci ne fonctionne pas et m'affiche l'erreur suivant:

    error C2040: 'image2arr'*: les niveaux d'indirection de 'double **(Image *)' et de 'int ()' sont différents


    Pouvez vous m'indiquer ce que veut dire cette erreur, d'ou elle provient, et comment le rectifier?

    Merci beaucoup d'avance!

    Lignes du code


    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
    double ** image2arr(Image* image)
     {
     
    	PixelPacket pix; 
    	int i,j;
    	double **tab; 
    	int nblin,nbcol;
     
    	nblin=image->rows;
    	nbcol=image->columns;
     
    	tab=dbl_alloc_2d(nblin,nbcol); /*allocation du tableau 2D*/
     
    	for (i=0; i<nblin; i++) /*balayage des lignes*/
    	{
    		for (j=0; j<nbcol;j++) /*balayage des colonnes*/
    		{
    			pix = GetOnePixel(image, j, i); /*acquisition de la valeur du pixel*/
    			tab[i][j] = (sqrt((double)pix.red*(double)pix.red+(double)pix.blue*(double)pix.blue+(double)pix.green*(double)pix.green))/(3*255); /*conversion et normalisation (utile pour la suite) */
    		}
    	}
    	return tab;
     
     }

  2. #2
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    A première vue, je ne vois pas d'erreur dans ton code, mais j'ai regardé plutôt rapidement (PS : la prochaine fois, utilise les balises codes).
    Bon, je ne suis pas familier des Warnings de VC, mais tant pis.
    Serait-il possible que tu appelles mal ta fonction ?
    Si ton code ne fait pas des milliers de lignes, ce serait possible d'en avoir quelques détails supplémentaires ? A quelle ligne l'erreur est-elle indiquée ?
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    merci pour votre réponse,
    voici la fonction dans laquelle on l'utilise:
    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
    37
    38
    39
    40
    41
    42
    43
     
     void detec_bord_image(char *im, char *bord, double **f1, double **f2, int linf, int colf)
     {
    	 int nblin, nbcol;
    	ExceptionInfo *exception;
    	Image *image, *image2, *imagefin, *scaled_image;
    	ImageInfo *image_info;
    	double **resultat, **imageG;	
     
     
    	 /* Initialisation d'ImageMagick et des strucutures utiles */
    	InitializeMagick((char*) NULL);
    	 exception=AcquireExceptionInfo();
    	image_info=CloneImageInfo(NULL);
    	printf("merde 1 ok\n");
     
    	 /*Lecture d'une image*/
    	 strcpy(image_info->filename, im);
     
    	image=ReadImage(image_info,exception);
     
     
    	nblin=image->rows;
    	nbcol=image->columns;
    	resultat=dbl_alloc_2d(nblin, nbcol);
     
     
     
    	/*convoluer l'image*/
    	imageG=image2arr(image);
    	resultat=dbl_edge_2D(imageG, nbcol, nblin, f1, f2, linf, colf );
     
    	 imagefin=arr2image( resultat , nblin, nbcol);
     
     
     
    	 /* Sauvegarde de l'image JPEG et désallocation */
    	 strcpy(imagefin->filename, bord); WriteImage(image_info,image2);
     
    	 /*Fermeture d'Imagemagick*/
    	DestroyMagick();
     
     }

    et voici le main:

    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
     
     
    int main()
    {
    	int i,j;
    	double **f1,**f2;
    	char adresse[100]="U://Bureau//image.bmp",resultat[100]="U:\Bureau\image2.jpg";
    	f1=dbl_alloc_2d(3, 3);
    	f2=dbl_alloc_2d(3, 3);
     
    	for(i=0;i<3;i++)
    	{
    		f1[0][i]=-1;f1[1][i]=0;f1[2][i]=1;
    		f2[i][0]=-1;f2[i][1]=0;f2[i][2]=1;
    	}
     
     
    	detec_bord_image(adresse,resultat, f1, f2, 3, 3);
     
    		system ("PAUSE");
    	return 0;
    }

  4. #4
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char adresse[100]="U://Bureau//image.bmp",resultat[100]="U:\Bureau\image2.jpg";
    excuse moi mais c'est normal la virgule avant "resultat[100]..." ?
    ne serait ce pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char adresse[100]="U://Bureau//image.bmp";resultat[100]="U:\Bureau\image2.jpg";

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    et quel est le type de resultat[100] ?

    Ca n'a rien d'anormal, il a juste créé 2 variables de type char sur une même ligne.

    Quant à ton problème, jamais rencontré, et je ne trouve pas de note ni ne comprends celles fournies par la msdn pour t'épauler .

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.71).aspx
    An expression involving the operators has inconsistent levels of indirection.

    If both operands are arithmetic or both are nonarithmetic (such as array or pointer), they are used without change. If one operand is arithmetic and the other is not, the arithmetic operator is converted to the nonarithmetic type.
    essaye de supprimer des lignes pour voir laquelle pose réellement problème, ça semble être à l'intérieur de la fonction, mais elle ne me choque pas
    s'il s'agit de l'appel même à la fonction, alors je sèche atm
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  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
    les niveaux d'indirection de 'double **(Image *)' et de 'int ()' sont différents
    Vérifie que lorsque tu appelles cette fonction (dans detec_bord_image()), son prototype est connu

Discussions similaires

  1. les niveaux d'indirection sont différents
    Par genie007 dans le forum Débuter
    Réponses: 2
    Dernier message: 25/06/2011, 22h44
  2. Réponses: 2
    Dernier message: 16/02/2010, 15h54
  3. Réponses: 4
    Dernier message: 25/11/2008, 18h34
  4. Réponses: 3
    Dernier message: 19/09/2007, 17h11
  5. Réponses: 1
    Dernier message: 19/08/2006, 06h03

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