Доступ к шаблонным методам шаблонного базового класса

Возможный дубликат:
Ошибка вызова метода шаблона в "шаблонном базовом классе"

Следующий код компилируется с MSVC10, но не с gcc 4.2.1:

template<class BaseQNativeWindow>
class NativeWindow : public BaseQNativeWindow
{
public:
  NativeWindow(AIPanelPlatformWindow handle) : BaseQNativeWindow(handle)
  {}

protected:
  virtual void closeEvent(QCloseEvent *e)
  {
    QList<QWidget *> childrenList;
    childrenList = BaseQNativeWindow::findChildren< QWidget * >(); // GCC ERROR
    foreach(QWidget *child, childrenList)
    {
      child->close();
    }
  }
};

Вот на что жалуется gcc:

error: expected primary-expression before ‘*’ token  
error: expected primary-expression before ‘>’ token  
error: expected primary-expression before ‘)’ token  

findChildren это шаблонный метод, который BaseQNativeWindow должен предоставить. Кажется, что GCC предполагает, что findChildren не шаблон еще до того, как знать, какой тип BaseQNativeWiindow является. Кто-нибудь может объяснить это?

Благодарю.

1 ответ

Решение

Ты должен сказать:

BaseQNativeWindow::template findChildren< QWidget * >()
//                 ^^^^^^^^

поскольку findChildren является зависимым именем, его значение должно быть неоднозначным.

Другие вопросы по тегам