Можно ли использовать QMultiMap :: ConstIterator в собственном шаблонном классе? - PullRequest
1 голос
/ 18 сентября 2011

Я хочу перебрать QMultiMap, используя

QMultiMap<double, TSortable>::const_iterator it;`

но компилятор жалуется

error: expected ‘;’ before ‘it’

в результате чего

error: ‘it’ was not declared in this scope

для каждого использования. Я пытался ConstIterator, const_iterator и даже медленнее Iterator без какого-либо успеха. Можно ли использовать Q (Multi) Map с шаблоном класса? Почему я не могу объявить Iterator, когда определение (как void *) в порядке?

Я использую следующий код (включая защиту не указан):

#include <QtCore/QDebug>
#include <QtCore/QMap>
#include <QtCore/QMultiMap>
#include <limits>

/** TSortable has to implement minDistance() and maxDistance() */
template<class TSortable>
class PriorityQueue {
public:

  PriorityQueue(int limitTopCount)
      : limitTopCount_(limitTopCount), actMaxLimit_(std::numeric_limits<double>::max())
  {
  }

  virtual ~PriorityQueue(){}

private:
  void updateActMaxLimit(){
    if(maxMap_.count() < limitTopCount_){
      // if there are not enogh members, there is no upper limit for insert
      actMaxLimit_ = std::numeric_limits<double>::max();
      return;
    }
    // determine new max limit

    QMultiMap<double, TSortable>::const_iterator it;
    it = maxMap_.constBegin();
    int act = 0;
    while(act!=limitTopCount_){
      ++it;// forward to kMax
    }
    actMaxLimit_ = it.key();

  }

  const int limitTopCount_;
  double actMaxLimit_;
  QMultiMap<double, TSortable> maxMap_;// key=maxDistance
};

1 Ответ

2 голосов
/ 18 сентября 2011

GCC выдает эту ошибку раньше той, которую вы указали:

error: need ‘typename’ before ‘QMultiMap<double, TSortable>::const_iterator’ because ‘QMultiMap<double, TSortable>’ is a dependent scope

, который объясняет проблему. Добавьте ключевое слово typename:

typename QMultiMap<double, TSortable>::const_iterator it;

и он будет строить.

...