Salve a tutti
volevo chiedere delucidazioni in merito a un errore che ottengo quando specifico il tipo all interno delle parentesi <> di una dichiarazione di una funzione friend di un template di classe ...
posto un po di codice che e` meglio . ..
codice:
template<typename mType>
Matrix<mType> operator+(const Matrix<mType>& ,const Matrix<mType>&);
template<typename mType>
Matrix<mType> operator*(const Matrix<mType>&, const Matrix<mType>&);
template<class mType>
class Matrix
{
friend std::ostream& operator<< <mType>(std::ostream& , Matrix<mType>& );
friend std::ostream& operator<< <mType>(std::ostream& , const Matrix<mType>& );
friend Matrix<mType> operator+ <>( const Matrix<mType>& , const Matrix<mType>& );
friend Matrix<mType> operator* <mType>(const Matrix<mType>& ,const Matrix<mType>& );
public:
inline Matrix(unsigned int = 3, unsigned int = 3 ); // 3x3 as defaulf matrix
inline Matrix(unsigned int, unsigned int, mType ); // constructor with initialization
inline Matrix( const Matrix<mType>& ); // copy constructor
~Matrix();
inline bool isEmpty()const { return empty_ ; }
inline bool allocate( unsigned int , unsigned int );
void print( unsigned int = 5 , unsigned int = 3)const ; // weight and precision as defaul ..
void Rand();
void Rand(unsigned int , unsigned int );
void trasp();
inline unsigned int getRowSize()const{ return row_ ;}
inline unsigned int getColumnSize()const{ return column_ ;}
inline vector<unsigned int> size()const;
inline mType& operator()(unsigned int , unsigned int )const;
# include "proxy.H"
inline Proxy operator[]( unsigned int i ){ return Proxy(*this,i); }
Matrix<mType>& operator=( const Matrix<mType>& );
inline void setEmpty(bool t){ empty_ = t ; }
template<typename T> Matrix<mType>& operator^(const T);
bool operator==(const Matrix<mType>& );
private:
unsigned int row_ ;
unsigned int column_;
mType ** mPtr_ ;
// utility function
bool isAllocated_;
bool empty_;
inline bool allocate_();
bool initialize_( mType &) ;
};
i problemi sono (o meglio le perplessita`) riguardano l'overload degli operatori + e * .. in particolare nell' operatore + se metto il tipo <mType> ricevo un errore :
codice:
n file included from /usr/include/c++/4.4/bits/stl_algobase.h:67,
from /usr/include/c++/4.4/bits/char_traits.h:41,
from /usr/include/c++/4.4/ios:41,
from /usr/include/c++/4.4/ostream:40,
from /usr/include/c++/4.4/iostream:40,
from main.C:1:
/usr/include/c++/4.4/bits/stl_iterator_base_types.h: In instantiation of ‘std::iterator_traits<double>’:
/usr/include/c++/4.4/bits/stl_iterator.h:96: instantiated from ‘std::reverse_iterator<double>’
matrix.H:35: instantiated from ‘Matrix<double>’
main.C:24: instantiated from here
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:127: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:128: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:129: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:130: error: ‘double’ is not a class, struct, or union type
/usr/include/c++/4.4/bits/stl_iterator_base_types.h:131: error: ‘double’ is not a class, struct, or union type
che non ottengo invece nel caso dell'operatore * pur specificando il tipo come potete vedere ..
ovviamente nelle definizioni delle funzioni (come nelle foward declararation) ovviamente non uso le parentesi <> .. qualcuno mi aiuta a capire il perche ?