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 :

Template et fonction amie / type de retour inconnu


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 28
    Par défaut Template et fonction amie / type de retour inconnu
    Bonjour à tous !

    J'ai besoin de vous pour un projet de la fac, je dois faire un logiciel de retouche d'image sur le format ppm.

    J'ai un soucis au niveau de ma classe image qui est un template : elle contient des fonctions amies et G++ me signal ca comme potentiellement anormale, j'ai un peu peur que lors du teste du programme, tout plante à cause d'une mauvaise declaration de ma part du coup ...

    Voici comme j'ai fait :

    __________.hpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <iostream>
     
    template<int N>
    class image
    {
      mes_attribut;
    public:
     //fct amie
      friend void save(image, std::string);
    };
    __________.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <iostream>
     
    template<int N>
    void save(image<N> pic, std::string path)
    {}
    l'erreur est
    "friend declaration 'void save(image<N>, str::string)' declares a non-template function"
    "if this is not what you intended, make sur the function template has already been declared and add <> after the function name here"


    Mon second problème viens du type des images, les images PPM peuvent être des images en noir et blancs (P1) ou couleur(P3), j'ai personnelement choisi de developper une classe "base" qui représente une matrice de nombres, puis image qui est un tableau de N base. Aucun soucis pour ça, SAUF pour le bouton "ouvrir". Bah voui, je sais pas à l'avance si c'est un P1 ou un P3, donc le type de retour de "ouvrir", je le connais pas ...

    J'ai vu sur le net qu'on pouvais utiliser comme type de retour, un mot clé "object", mais je n'ai trouvé aucun exemple ... un peu d'aide svp ?


    Merci d'avance !!

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 29
    Par défaut
    Salut, essaye :

    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
     
    template <typename N>
    class image
    {
     
    public:
     
    	template <typename T>
      friend void save(image<T>, std::string);
    };
     
     
    template <typename N>
    void save(image<N> pic, std::string path)
    {}
    pour voir.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Attention, il y a une autre possibilité, qui ne déclare que la fonction prenant la meme template comme friend.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename N> struct image {
    	template <>
    	friend void save(image<N>, std::string);
    }
    j'ai juste un doute sur la syntaxe, entre image<N> ou image?

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 29
    Par défaut
    Attention, il y a une autre possibilité, qui ne déclare que la fonction prenant la meme template comme friend.
    Bien vu, dans ce cas j'enlèverais effectivement le <N> de image dans la déclaration "interne" de de save car implicite (après peut-être que les deux marche), et par contre je pense qu'il faut mettre

    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template <typename N>
    class image
    {
     
    public:
     
    		template <typename>
    		friend void save(image, std::string);
    };
     
     
    template <typename N>
    void save(image<N> pic, std::string path)
    {}
    Et si ça ne passe pas, il faut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend void save(image, std::string);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend void save(image<N>, std::string);
    mais là j'avoue que je ne sais pas par cœur.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 28
    Par défaut
    Pourquoi un "template <typename>" en fait ? je comprend pas

    Et vous avez une idée pour mon second problème ? ^^


    Ps: l'erreur n'est plus

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je ne pense pas qu'il faille un typename. Sans nom de type derrière, ca me parait … incongru.

Discussions similaires

  1. Réponses: 25
    Dernier message: 04/06/2012, 22h02
  2. Réponses: 32
    Dernier message: 28/11/2010, 17h33
  3. class template et fonction amie
    Par sleepless dans le forum C++
    Réponses: 5
    Dernier message: 19/11/2010, 13h37
  4. Type de retour inconnu
    Par tittoto dans le forum C++
    Réponses: 4
    Dernier message: 04/12/2008, 12h29
  5. type de retour de fonction template
    Par k1000 dans le forum Langage
    Réponses: 5
    Dernier message: 21/04/2008, 11h41

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