C ++: вернуть указатель на подкласс шаблона - PullRequest
3 голосов
/ 11 апреля 2011

Каков синтаксис для выполнения чего-то подобного? Когда я пытаюсь скомпилировать приведенный ниже код, он говорит мне, что 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)
}

1 Ответ

10 голосов
/ 11 апреля 2011

Вам не хватает ключевого слова typename.См. Этот вопрос для более подробной информации о том, почему typename требуется.Этот код должен скомпилировать:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...