Возможный дубликат:
Ошибка вызова шаблонного метода в «templated-base-class»
Следующий код компилируется с 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
является. Кто-нибудь может объяснить это?
Благодарю.
Ты должен сказать:
BaseQNativeWindow::template findChildren< QWidget * >()
// ^^^^^^^^
поскольку findChildren
является зависимым именем, его значение должно быть неоднозначным.
Других решений пока нет …