0

I'm getting errors on the lines that instantiate the iterators. Any thoughts on why? If I replace the template parameter (T) with an explicit type (e.g. int), the problem goes away:

template <typename T>
class StateFilter
{
  vector<T> state_;
  vector<T> filter_;

 public:
  StateFilter() {}

  T calc()
  {
    T sum = 0;
    //T* state_it = state_.begin();
    //T* filter_it = filter_.begin();
    vector<T>::iterator state_it = state_.begin();
    vector<T>::iterator filter_it = filter_.begin();
    while(filter_it < filter_.end())
    {   
      sum += (*state_it++) * (*filter_it++);
    }   
    return sum;
  }
};

Error:

rcomp.cc: In member function ‘T StateFilter<T>::calc()’:
rcomp.cc:278: error: expected `;' before ‘state_it’
rcomp.cc:279: error: expected `;' before ‘filter_it’
rcomp.cc:280: error: ‘filter_it’ was not declared in this scope
rcomp.cc:282: error: ‘state_it’ was not declared in this scope
Bryant
  • 334
  • 1
  • 11
  • `typename vector::iterator state_it = state_.begin();`, ditto `filter_it` – Piotr Skotnicki Aug 14 '15 at 18:04
  • Thanks, I just ran this code on Coliru as well and the compiler there gave an appropriate error: error: need 'typename' before 'std::vector::iterator' because 'std::vector' is a dependent scope vector::iterator state_it = state_.begin(); – Bryant Aug 14 '15 at 18:06

0 Answers0