Шаблонные классы с ++ дружественные функции - PullRequest
1 голос
/ 03 октября 2011

Мой код имеет такую ​​же структуру, как показано ниже. У меня есть два контейнерных класса, определенных в одном заголовочном файле, и у каждого из них есть функция друга с параметрами типа другой класс, поэтому я получаю ошибку компиляции, которая похожа на 'Class2' - необъявленный идентификатор.

Пробовал несколько вещей, но не сработало. Я думаю, что если добавить еще один параметр шаблона V к обоим шаблонам и заменить Class2<T> на это, то это может быть решением, но если я использую эти контейнеры в своей программе, все станет намного сложнее. Заголовки, а затем включить в Class1 Class2 и наоборот, но я на самом деле сомневаюсь, что это может работать вообще.

Я действительно не могу понять, как решить эту проблему, поэтому, пожалуйста, ваша помощь очень ценится!

template<class T>
class Class1
{
  ...
  friend void function1(Class1<Class2<T>>&, const Class2<T>&);
  ...
};

template<class V>
class Class2
{
   ...
   friend void function2(Class1<V>);
   ...
};

1 Ответ

3 голосов
/ 03 октября 2011

Добавить предварительную декларацию для Class2 в начале файла:

template<class V> class Class2;
...