Class template vecteur c++

Fermé
kamy86 Messages postés 40 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 17 mai 2010 - 29 oct. 2008 à 22:52
mamiemando Messages postés 33549 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mars 2025 - 29 oct. 2008 à 23:58
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:
// 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

mamiemando Messages postés 33549 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mars 2025 7 829
29 oct. 2008 à 23:58
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
0