Шаблоны подружиться друг с другом - PullRequest
2 голосов
/ 08 июня 2011

У меня есть шаблон класса ResourcePtr<T> и шаблон ResouceManager<T>.Я хочу, чтобы двое подружились друг с другом.Если я сделаю следующее, я получу ошибку компиляции;как я могу это исправить?

template<class T>
class ResourcePtr
{
    friend class ResourceManager<T>;
};

template<class T>
class ResourceManager
{
    friend class ResourcePtr<T>;
};

ошибка C2059: синтаксическая ошибка: '<' <br>ошибка C2238: неожиданный токен предшествует ';'

1 Ответ

6 голосов
/ 08 июня 2011

Как обычно для взаимных вещей: объявите одно перед определением другого.

template<class T>
class ResourceManager;

template<class T>
class ResourcePtr
{
    friend class ResourceManager<T>;
};

template<class T>
class ResourceManager
{
    friend class ResourcePtr<T>;
};
...