Class template vecteur c++

kamy86 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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