做这样的事情的语法是什么?当我尝试编译下面的代码时,它告诉我 a ';' was expected before '*' ,指向函数的返回类型 ResourceManager<T>::ResourceWrapper*

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)
}

最佳答案

您缺少 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)
}

关于C++:返回指向模板子类的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5617303/

10-11 19:36