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: jump to label `errPicture'


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut error: jump to label `errPicture'
    Bonjour, excusez moi après avoir fait du c++ à l'école, ça fait longtemps que je n'ai plus touché à ce langage et je veux m'y mettre maintenant alors j'ai installé tout ce qu'il faut et faire un test pour voir si l'installation est correcte Ok.
    Maintenant j'ai pris un code sur le net dans l'intention de le tester .J'ai trois erreurs et je ne sais pas comment les résoudre alors j'ai besoin de vous de m'initier de nouveau à ce langage en commençant par la correction de ces erreurs.
    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
    HBITMAP PictureToBitmap(LPBYTE pmem, DWORD nSize)
    {
    	HRESULT hr;
    	CoInitialize(0);
    	HBITMAP hbmp_dst = 0;
    	HGLOBAL hgbl =(HGLOBAL)GlobalAlloc(GMEM_FIXED, nSize);
     
    	memcpy(hgbl, pmem, nSize);
     
    	IStream* stream = 0;
    	hr = CreateStreamOnHGlobal(hgbl, FALSE, &stream);
    	if(!SUCCEEDED(hr) || !stream) goto errPicture;
     
    	IPicture* picture = 0;
    	hr = OleLoadPicture(stream, nSize, 0, IID_IPicture, (void**)&picture);
    	if(!SUCCEEDED(hr) || !picture) goto errPicture;
     
    	HBITMAP hbmp_src;
    	picture->get_Handle((OLE_HANDLE *)&hbmp_src);
    	if(!SUCCEEDED(hr) || !picture) goto errHandle;
     
    	BITMAP bmp;
    	GetObject(hbmp_src, sizeof bmp, &bmp);
    	hbmp_dst = (HBITMAP)CopyImage(hbmp_src, IMAGE_BITMAP, 0, 0, 0);
     
    errHandle:
    	picture->Release();
    errPicture:
    	stream->Release();
    	GlobalFree(hgbl);
    	CoUninitialize();
    	return hbmp_dst;
    }
    erreurs
    Compiling: CImage.cpp
    In file included from C:\workspace\C\ImAnalyse\Src\CImage.cpp:23:
    C:\workspace\C\ImAnalyse\Src\CImage.h:361:7: warning: no newline at end of file
    C:\workspace\C\ImAnalyse\Src\CImage.cpp: In function `HBITMAP__* PictureToBitmap(BYTE*, DWORD)':
    C:\workspace\C\ImAnalyse\Src\CImage.cpp:599: error: jump to label `errPicture'
    C:\workspace\C\ImAnalyse\Src\CImage.cpp:583: error: from here
    C:\workspace\C\ImAnalyse\Src\CImage.cpp:585: error: crosses initialization of `IPicture*picture'
    Process terminated with status 1 (0 minutes, 3 seconds)
    3 errors, 4 warnings

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    1/ Je dirais que le code que tu as récupéré est pas terrible. S'il s'agit d'apprendre, change de code.
    2/ Le problème est lié au fait qu'il y a des variables déclarée après le goto. Du coup, il ne sait pas trop qu'en faire. Une solution est de remontée les déclarations de variables avant le premier goto.
    Une bien meilleure solution est de réécrire le code pour faire du RAII.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Outre le fait d'utiliser le RAII conseillé, à juste titre, par 3DArchi, on pourrait également citer le fait d'éviter les goto autant que faire se peut...

    Entre les tests "vrai/ faux" (if, else), les tests à choix multiples (switch case) et les boucles (Tant que (while), jusqu'à (do... while) et incrémentales (for) ), il est parfaitement possible de s'éviter le recours aux goto, qui ont la fâcheuse manie de transformer le code en un plat de spagetti dans lequel il est particulièrement difficile de s'y retrouver (quand je suis à telle ligne, je viens d'ou, je dispose de quoi, et je vais ou )

    Il existe, il est vrai, quelques cas bien particuliers dans lesquels le recours au goto *peut s'avérer* être "la moins mauvaise solution", mais j'ai eu un prof qui nous menaçait de nous jeter par la fenêtre s'il croisait un seul goto dans nos codes... Je crois qu'il l'aurait fait, et je suis très proche d'être de son avis
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. error: relative jump out of range
    Par n5Rzn1D9dC dans le forum x86 32-bits / 64-bits
    Réponses: 0
    Dernier message: 22/12/2013, 19h51
  2. Plugin validate, placement des labels error
    Par gui80 dans le forum jQuery
    Réponses: 2
    Dernier message: 17/02/2012, 21h53
  3. [DATA] FORMAT + HLO='O' et LABEL='ERROR'
    Par Invité dans le forum SAS Base
    Réponses: 5
    Dernier message: 13/12/2011, 13h41
  4. Jump to a case label
    Par Amybond dans le forum C++
    Réponses: 2
    Dernier message: 25/08/2007, 20h54
  5. Error 35 : label identifier expected
    Par goldeneagle1 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2007, 22h12

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