Class template vecteur c++
Bonjour,
je viens de créer une classe template vecteur et je veux surcharger l'operateur + mais lors de la compilation cette erreur s'affiche:
et le .cpp:
merci d'avance
je viens de créer une classe template vecteur et je veux surcharger l'operateur + mais lors de la compilation cette erreur s'affiche:
// Vecteur.h: interface for the Vecteur class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_VECTEUR_H__E45230D7_631C_4DCA_8CE3_CF287CA8F0C0__INCLUDED_) #define AFX_VECTEUR_H__E45230D7_631C_4DCA_8CE3_CF287CA8F0C0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <iostream.h> template <class T > class Vecteur { T *tab; int taille; public: Vecteur(int t); friend Vecteur<T> operator+ (Vecteur<T> tab1, Vecteur<T> tab2); T & operator[](int i); friend ostream & operator<< (ostream &out, const Vecteur<T> &c); int getTaille(); T* GetT(); void setTaille( int ta); virtual ~Vecteur() { delete [] tab ; } }; #endif // !defined(AFX_VECTEUR_H__E45230D7_631C_4DCA_8CE3_CF287CA8F0C0__INCLUDED_)
et le .cpp:
// Vecteur.cpp: implementation of the Vecteur class. // ////////////////////////////////////////////////////////////////////// #include <iostream.h> #include "stdafx.h" #include "Vecteur.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// template <class T> Vecteur<T>::Vecteur(int t) { // if (t==0) throw CreationException("rtyftyft"); taille = t; c } template <class T> T & Vecteur<T>::operator[](int i) { if (i== 0) throw "Erreur indice = 0" else if (i >= taille) throw "Erreur d'indice"; else return tab[i]; } template <class T> Vecteur<T> &Vecteur<T>::operator+ (Vecteur<T> v1, Vecteur<T> v2) { tab3 = new T[taille]; for(i=0, i<taille, i++) tab3[i]=tab1[i]+tab2[i] } template <class T> ostream & operator<< (ostream &out, const Vecteur<T> &c) { for(int i=0; i<c.getTaille(); i++) return out<< c.tab[i]; } template <class T> int Vecteur<T>::getTaille() { return taille; } template <class T> void Vecteur<T>::setTaille( int ta) { taille=ta; }
merci d'avance
1 réponse
Alors attention :
- une fonction template doit être implémentée dans le .hpp, sinon elle n'est instanciable que dans le .cpp dans lequel elle est implémentée,
- il ne faut pas utiliser les anciens headers de la STL (<iostream.h>) mais les noueaux (<iostream>), et précéder les noms de classes de la STL par le namespace std (std::ostream).
Dans ton cas, vu que la classe est template, elle sera intégralement dans le .hpp.
Ensuite, évite d'utiliser des headers non standards (genre "stdafx.h" et les options passés au précompilateur qui vont avec), qui sont à mon avis dans ton cas superflus.
Bonne chance
- une fonction template doit être implémentée dans le .hpp, sinon elle n'est instanciable que dans le .cpp dans lequel elle est implémentée,
- il ne faut pas utiliser les anciens headers de la STL (<iostream.h>) mais les noueaux (<iostream>), et précéder les noms de classes de la STL par le namespace std (std::ostream).
Dans ton cas, vu que la classe est template, elle sera intégralement dans le .hpp.
Ensuite, évite d'utiliser des headers non standards (genre "stdafx.h" et les options passés au précompilateur qui vont avec), qui sont à mon avis dans ton cas superflus.
Bonne chance