I am trying to write a few functions to extend the STL vector class. What I have below seems to work fine for built-in types like "double," "int," what have you, but produces an error when I use abstract types like complex<double>.
Here's my code:
And here's the error message:Code:#include <complex> #include <vector> #include <iostream> using namespace std; template <class D> class statistics_vector : public vector<D> { public: D sum( void ); D mean( void ); }; template <class D> D statistics_vector<D>::sum( void ) { typename vector<D>::const_iterator position; D arithmetic_sum = 0; for( position = this->begin(); position != this->end(); ++position ) arithmetic_sum += *position; return arithmetic_sum; } template <class D> D statistics_vector<D>::mean( void ) { return sum() / vector<D>::size(); } int main( void ) { statistics_vector<complex<double> > values; complex<double> a( 1, 1 ), b( 2, 2 ), c( 3, 3 ), mean_value; values.push_back( a ); values.push_back( b ); values.push_back( c ); mean_value = values.mean(); return EXIT_SUCCESS; }
Code:statistics_vector.cc: In member function `D statistics_vector<D>::mean() [with D = std::complex<double>]': statistics_vector.cc:39: instantiated from here statistics_vector.cc:28: error: no match for 'operator/' in '((statistics_vector<std::complex<double> >*)this)->statistics_vector<D>::sum [with D = std::complex<double>]() / ((std::vector<std::complex<double>, std::allocator<std::complex<double> > >*)this)->std::vector<_Tp, _Alloc>::size [with _Tp = std::complex<double>, _Alloc = std::allocator<std::complex<double> >]()'




Reply With Quote
