2011-04-11 97 views
3

做這種事情的語法是什麼?當我嘗試編譯下面的代碼時,它告訴我a ';' was expected before '*'指向函數的返回類型ResourceManager<T>::ResourceWrapper*C++:返回指向模板子類的指針

template<class T> 
class ResourceManager 
{ 
    private: 
    struct ResourceWrapper; 
    ResourceWrapper* pushNewResource(const std::string& file); 
}; 

// (Definition of ResourceWrapper not shown.) 

template <class T> 
ResourceManager<T>::ResourceWrapper* ResourceManager<T>::pushNewResource(
    const std::string& file) 
{ 
    // (Irrelevant details) 
} 

回答

10

您錯過了typename關鍵字。有關爲什麼需要typename的更多詳細信息,請參閱此question。此代碼應編譯:

template<class T> 
class ResourceManager 
{ 
    private: 
    struct ResourceWrapper; 
    ResourceWrapper* pushNewResource(const std::string& file); 
}; 

// (Definition of ResourceWrapper not shown.) 

template <class T> 
typename ResourceManager<T>::ResourceWrapper* ResourceManager<T>::pushNewResource(
^^^^^^^^ const std::string& file) 
{ 
    // (Irrelevant details) 
}