1
可能重複:
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
是什麼類型之前不是模板。任何人都可以解釋嗎?
謝謝。
看起來它應該工作...嘗試如果'BaseQNativeWindow :: template findChildren < QWidget* >()'解決它 –
[this post](http://stackoverflow.com/questions/610245/where-and-why-do -i-have-to-put-the-template-and-typename-keywords/613132#613132)可能會有所幫助。 – juanchopanza
確實添加「模板」解決它,謝謝。需要刷新我的模板知識。如果你創建它,我會接受你的答案:)。 – Badder