templates
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

templates



  1. #1
    mimi-mimi1

    templates


    ------

    Bonjour,
    je cherche à créer une classe vecteur en utilisant les templates, et qui a l'opération du calcul des normes.
    Alors je commence par:
    template <typename Real, int dim>
    class vector
    {
    private:
    Real data {dim}
    public:
    ???
    }
    Je suis complétement larguée pour la définition la méthode qui permet de calculer une norme. Comment on fait? S'il vous plaît.
    Je vous remercie par avance pour votre aide.

    -----

  2. #2
    mimi-mimi1

    Re : templates

    voici comment je définie la fonction norme(sans templates pour le moment):
    Code:
    float norme (vector u, unsigned in n)
    
    {
    
    float p=;
    
    for (int i=0; i<n; i++)
    
    {
    
    p=u[i]*u[i]+p;
    
    }
    
    return sqrt(p);
    
    }
    Le problème avec ce que j'ai écrit, c'est que le compilateur ne sait pas encorequi est vector u, puisque justement je sus entrain de définir vector u. Domment commernt arranger les choses?

    Merci par avance.

  3. #3
    mimi-mimi1

    Re : templates

    Désolée pour les multi-poste, je n'ai pas pu modifer l'ancien. En fait, voici mon problème:
    Bonjour,
    je cherche à créer une classe vecteur en utilisant les templates, et qui a l'opération du calcul des normes.

    voici mon code pour le moment(sans templates pour le moment):

    fichier.h

    Code:
    #include<iostream>
    using namespace std;
    class vecteur
    {
     private:
      unsigned int n;//taille
      double *v;//pointer les composantes
     public:
     vecteur():v(NULL),n(0){};//Déclaration et définition du constructeur par défaut
      vecteur(unsigned int nb=0, double val=0);//déclaration d'un constructeur avec argument
      vecteur(vecteur const& v);//déclaration d'un constructeur de copie
      ~vecteur();//déstructeur
      double& operator  []  (int rang);//Déclaration de l'opérateur[]
      vecteur& operator = (const vecteur&);//Déclaration de l'opérateur =
      vecteur operator  *  (double scalar); //Déclaration de l'opérateur *
      vecteur operator + (const vecteur&);//Déclaration de l'opérateur +
      vecteur operator - (const vecteur&);//Déclaration de l'opérateur -
      vecteur operator += (const vecteur&);//Déclaration de l'opérateur +=
      vecteur operator -= (const vecteur&);//Déclaration de l'opérateur -=
      float vecteur:: norme (const vecteur&, unsigned int n);
      void affiche();   
    };
    fichier.cpp

    Code:
    #include <iostream>
    #include "template.h"
    #include <cmath>
    #include <fstream>
    using namespace std;
    //Définition du constructeur de copie
    vecteur::vecteur(const vecteur& ref): n(ref.n)
    {
      v = new double[n];
      for(unsigned int i=0; i<n;i++)
        v[i]=ref.v[i];
    }
    
    //Définition du constructeur avec argument
    vecteur::vecteur(int nb, double val)
    {
       n = nb;
       if (nb == 0)
          v = NULL; 
       else
       {
          v = new double[n];
          for (unsigned i=0; i<n; i++)
             v[i] = val;
       }
    }
    
    //Définition du destructeur
    vecteur::~vecteur()
    {}
    
    //Définition de []
    double& vecteur::operator[](int rang)
    {
      return v[rang]; 
    }
    
    //Définition de =
    
    vecteur &vecteur::operator=(const vecteur &a)
    {
      for(int i=0;i<n;i++)
        {
          v[i]=a.v[i];
        }
    return *this;
    }
    
    
    //Définition de +
    vecteur vecteur:: operator + (const vecteur &a)
    {
    vecteur d(n);
    for (int i=0;i<n;i++)
    d.v[i]=v[i]+a.v[i];
    return d;
    }
    
    //Définition de *
    vecteur vecteur:: operator*(double  d)
    {
    for(int i=0;i<n;i++)
    v[i]=d*v[i];
    return *this;
    }
    
    
    //Définition de la fonction norma
    float vecteur:: norme (const vecteur&, unsigned int n)
    {
    float p=;
     for (int i=; i<n; i++)
      {
       p=v[i] * v[i] + p;
      }
     return sqrt(p);
    } 
    
    
    
    
    //Déclaration de la fonction affiche
    void vecteur::affiche()
    {
    //cout<<"les coordonnées du vecteurs v sont"<<endl;
    for(int i=0;i<n;i++)
    {
    cout<<v[i]<<endl;
    }
    cout<< "---fin---"<<endl;
    }
    
    int main()
    
    {
    
    return ;
    
    }
    Quelles sont les modification a apportées pour introduire les templates?
    Merci par avance.
    Je vous remercie par avance pour votre aide.
    Dernière modification par mimi-mimi1 ; 24/09/2015 à 16h48.

  4. #4
    mimi-mimi1

    Re : templates

    Bon, j'ai réecris mon programme

    fichier.h
    Code:
    #include<iostream>
    
    //template<typename Real, int dim> class Vector; 
      
    //template<typename Real, int dim> 
    //std::ostream& operator<<(std::ostream&, Vector<Real,int> const&);
       
    template <typename Real>
    class vector
    {
     private:
      int dim;//taille
      Real *v;//pointer les composantes
     public:
      vector(int nb=0, Real val=0);//déclaration d'un constructeur avec argument
      vector(vecteur const& v);//déclaration d'un constructeur de copie
      ~vector();//déstructeur
      Real& operator [] (int rang);//Déclaration de l'opérateur[]
      vector& operator = (const vector&);//Déclaration de l'opérateur =
      vector operator * (Real scalar); //Déclaration de l'opérateur *
      vector operator + (const vector&);//Déclaration de l'opérateur +
      vector operator - (const vector&);//Déclaration de l'opérateur -
      Real vector:: norme (const vector&, int dim) const;
      void affiche();   
    };
    
    
    
    //Définition du constructeur de copie
    vector::vector(const vecteur& ref): n(ref.dim)
    {
      v = new Real[dim];
      for(int i=0; i<dim;i++)
        v[i]=ref.v[i];
    }
    
    //Définition du constructeur avec argument
    vector::vector(int nb, Real val)
    {
       dim = nb;
       if (nb == 0)
          v = NULL; 
       else
       {
          v = new Real[dim];
          for (int i=0; i<dim; i++)
             v[i] = val;
       }
    }
    
    //Définition du destructeur
    vector::~vector()
    {}
    
    //Définition de []
    Real& vector ::operator[](int rang)
    {
      return v[rang]; 
    }
    
    //Définition de =
    
    vector &vector ::operator=(const vecteur &a)
    {
      for(int i=0;i<dim;i++)
        {
          v[i]=a.v[i];
        }
    return *this;
    }
    
    
    //Définition de +
    vector vector :: operator + (const vecteur &a)
    {
    vecteur d(dim);
    for (int i=0;i<n;i++)
    d.v[i]=v[i]+a.v[i];
    return d;
    }
    
    //Définition de *
    vector vector :: operator*(Real  d)
    {
    for(int i=0;i<dim;i++)
    v[i]=d*v[i];
    return *this;
    }
    
    
    //Définition de la fonction norme
    Real vector :: norme (const vecteur&, int dim) const
    {
    Real p=;
     for (int i=0; i<dim; i++)
      {
       p=v[i] * v[i] + p;
      }
     return sqrt(p);
    } 
    
    
    //Déclaration de la fonction affiche
    void vector :: affiche()
    {
    //cout<<"les coordonnées du vecteurs v sont"<<endl;
    for(int i=0;i<dim;i++)
    {
    std::cout<<v[i]<<std::endl;
    }
    std::cout<< "---fin---"<<std::endl;
    }
    fichier.cpp

    Code:
    #include <iostream>
    #include "Vector.h"
    #include <cmath>
    #include <fstream>
    using namespace std;
    
    
    int main()
    
    {
    
    return 0 ;
    
    }
    Et il me renvoie les erreurs suvantes:

    error: expected ‘)’ before ‘const’
    vector(vecteur const& v);//déclaration d'un constructeur de copie
    ^
    Vector.h:23:8: error: extra qualification ‘vector<Real>::’ on member ‘norme’ [-fpermissive]
    Real vector:: norme (const vector&, int dim) const;
    ^
    Vector.h:23:48: error: explicit specialization of ‘Real vector<Real>::norme(const vector<Real>&, int) const’ must be introduced by ‘template <>’
    Real vector:: norme (const vector&, int dim) const;
    ^
    Vector.h:30:1: error: invalid use of template-name ‘vector’ without an argument list
    vector::vector(const vecteur& ref): n(ref.dim)
    ^
    Vector.h:38:1: error: invalid use of template-name ‘vector’ without an argument list
    vector::vector(int nb, Real val)
    ^
    Vector.h:52:1: error: invalid use of template-name ‘vector’ without an argument list
    vector::~vector()
    ^
    Vector.h:56:1: error: ‘Real’ does not name a type
    Real& vector:perator[](int rang)
    ^
    Vector.h:63:1: error: invalid use of template-name ‘vector’ without an argument list
    vector &vector:perator=(const vecteur &a)
    ^
    Vector.h:74:1: error: invalid use of template-name ‘vector’ without an argument list
    vector vector:: operator + (const vecteur &a)
    ^
    Vector.h:83:1: error: invalid use of template-name ‘vector’ without an argument list
    vector vector:: operator*(Real d)
    ^
    Vector.h:92:1: error: ‘Real’ does not name a type
    Real vector:: norme (const vecteur&, int dim) const
    ^
    Vector.h:106:6: error: ‘template<class Real> class vector’ used without template parameters
    void vector::affiche()
    ^
    Vector.h: In function ‘void affiche()’:
    Vector.h:109:15: error: ‘dim’ was not declared in this scope
    for(int i=0;i<dim;i++)
    ^
    Vector.h:111:12: error: ‘v’ was not declared in this scope
    std::cout<<v[i]<<std::endl;



    Indiquez moi comment le corriger s'il vous plaît pour que je comprenne une bonne fois pour toute. Je vous remercie par avance.
    Dernière modification par mimi-mimi1 ; 25/09/2015 à 10h39.

  5. A voir en vidéo sur Futura
  6. #5
    mimi-mimi1

    Re : templates

    En fait c'est bon maintenant, j'ai corrigé toutes les erreurs et ca marche. Merci.

Discussions similaires

  1. templates
    Par hinanehinane dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 19/09/2015, 12h54
  2. templates pour créer un site web
    Par dalida1111 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 15
    Dernier message: 09/11/2013, 08h19
  3. Surfactants / Templates
    Par krissprolls dans le forum Chimie
    Réponses: 2
    Dernier message: 26/01/2011, 11h16