可能重复:
Error calling template method in “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
类型之前也不是模板。有谁能解释一下?
感谢。
答案 0 :(得分:5)
你必须说:
BaseQNativeWindow::template findChildren< QWidget * >()
// ^^^^^^^^
由于findChildren
是一个从属名称,因此必须明确其含义。