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 :

identificateur non déclaré


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut identificateur non déclaré
    Salut à tous,

    J'ai une erreur de compilation sur laquelle il faut bien avouer, je sèche un peu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename T>
     bool inspectVoisinage(vigra::BasicImage<T>::Iterator & A, vigra::BasicImage<T>::Iterator  & B)
    {
    	return true;
    }
    Le compilo m'indique:
    d:\analyse v2.02\analyse\Warping.h(14) : error C2065: 'A' : identificateur non déclaré
    d:\analyse v2.02\analyse\Warping.h(14) : error C2065: 'B' : identificateur non déclaré
    d:\analyse v2.02\analyse\Warping.h(17) : error C2998: 'bool inspectVoisinage' : ne peut pas être une définition de modèle
    Vous avez une idée ?

  2. #2
    screetch
    Invité(e)
    Par défaut
    verifie que les headers de vigra sont bien trouves (et inclus)

    ensuite, ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template <typename T>
     bool inspectVoisinage(typename vigra::BasicImage<T>::Iterator & A, typename vigra::BasicImage<T>::Iterator  & B)
    {
    	return true;
    }
    ca aidera a savoir qu'il s'agit d'un type

    si ca ne corrige pas, ca va probablement changer le message d'erreur.

  3. #3
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Pour les headers, y'a pas de soucis...

    J'avais déjà rajouté les typename en effet, et ça m'a donné ça :
    d:\analyse v2.02\analyse\Warping.h(31) : error C2783: 'bool inspectVoisinage(vigra::BasicImage::Iterator &,vigra::BasicImage::Iterator &)' : impossible de déduire l'argument modèle pour 'T'
    d:\analyse v2.02\analyse\Warping.h(14) : voir la déclaration de 'inspectVoisinage'
    d:\analyse v2.02\analyse\Warping.h(104) : voir la référence à l'instanciation de la fonction modèle 'vigra::BasicImage boucher>(const vigra::BasicImage &,T)' en cours de compilation
    with
    [
    PIXELTYPE=vigra::RGBValue,
    VALUETYPE=vigra::UInt16,
    T=vigra::RGBValue
    ]
    .\main.cpp(53) : voir la référence à l'instanciation de la fonction modèle 'vigra::BasicImage Warping::warp>(const vigra::BasicImage &)' en cours de compilation
    with
    [
    PIXELTYPE=vigra::RGBValue,
    VALUETYPE=vigra::UInt16
    En gros, le compilo peut pas déduire quel modèle utilisé, mais je comprend pas trop pourquoi à vrai dire...

  4. #4
    screetch
    Invité(e)
    Par défaut
    ensuite je pense que tu appelles la methode de voisinage.
    la nouvelle erreur se situe a la ligne 31

    y'a quoi a cette ligne ?

  5. #5
    screetch
    Invité(e)
    Par défaut
    neanmoins a vue de nez je dirait que tu ppelles "inspectVoisinage(iter1, iter2);" et que ca plante. Essaye d'appeler
    inspectVoisinage<T>(iter1, iter2);

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    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
    template <typename T>
     bool inspectVoisinage(typename vigra::BasicImage<T>::Iterator & A, typename vigra::BasicImage<T>::Iterator  & B)
    {
    	return true;
    }
     
    template <typename T>
    vigra::BasicImage<T> boucher (const vigra::BasicImage<T> & image, T val)
    {
    	vigra::BasicImage<T> image_fill (image);
     
    	for (int i = 0; i < image_fill.width(); i++) {
    		for (int j = 0; j < image_fill.height(); j++) {
    			if (image(i,j) == val ) {
    				int n = 1;
    				if (i >= n && j >= n) {
    					typename vigra::BasicImage<T>::Iterator iter_A = image_fill.upperLeft() + vigra::Diff2D(i - n, j - n);
    					typename vigra::BasicImage<T>::Iterator iter_B = image_fill.upperLeft() + vigra::Diff2D(i + n, j + n);
    					while (inspectVoisinage<T>(iter_A, iter_B) == false) 
    						n++;
    				}
    			}
    		}
    	}
    	return image_fill;
    }
    Effectivement comme ça, ça marche parfaitement !
    Je te remercie beaucoup!

    Par contre, je comprend pas vraiment pourquoi...

  7. #7
    screetch
    Invité(e)
    Par défaut
    Et ben en fait le message d'erreur est ters clair (non je deconne c'est une grosse farce les messages d'erreur de templates ^^)

    cela signifie que le compilateur n'a pas reussi a deviner tout seul quel etait le type T en question.

    Exemple plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<typename T>
    const T& max(const T& v1, const T& v2)
    {
       //blah blah blah
    }
    si tu appelles
    alors le compilo peut deduire que tu voulais parler de la version max des entiers.

    Si tu appelles
    alors le compilo t'enverra bouler en disant qu'il ne peut pas deduire le parametre T a partir des valeurs que tu lui donnes (est ce un entier ? un flottant? )

    Pour que ca marche tu dois lui indiquer quel est le type
    AAAAH ok il s'agissait de la version double, et le compilo est content.

    Ici c'est le meme cas, tu donnes des valeurs a la fonction, mais le compilo n'arrive pas a savoir de quel type on parle. Cela doit venir du fait que typename vigra::BasicImage<T>::Iterator est imprecis (par exemple un char* ou un truc du genre)

    du coup, il ne sait pas comment retrouver un T a partir de l'iterateur.

    Precise lui que tu parlais d'un T et la il est content.

  8. #8
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Merci pour ton explication d'une clarté éblouissante !

    Mon problème est très clairement résolu!

    Merci à toi screetch!

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

Discussions similaires

  1. [D5] Identificateur non déclaré
    Par MelkInarian dans le forum Delphi
    Réponses: 2
    Dernier message: 20/04/2007, 17h20
  2. findcomponent, identificateur non déclaré
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 04/07/2006, 13h54
  3. Identificateur non déclaré
    Par nisere dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 09h33
  4. Identificateur non déclaré : 'Null'
    Par Mofid04 dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2006, 11h47
  5. Problème d'identificateur non déclaré
    Par renorx dans le forum Débuter
    Réponses: 3
    Dernier message: 14/11/2005, 20h39

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