У вас есть круговая зависимость между вашими заголовочными файлами.Поскольку ваши классы так тесно переплетены, я бы предложил объединить их в один заголовочный файл, структурированный так:
class A
{
public:
template <class T>
void f1();
};
class B
{
...
};
template <class T>
void A::f1()
{
// Use full definition of class B
}
Если вы настаиваете на использовании отдельных заголовочных файлов для A и B (что не будетдействительно имеют какое-то значение, так как они в конечном итоге включают друг друга), вам нужно реструктурировать их так, чтобы один из заголовков не включал другой, поэтому по крайней мере одну из зависимых функций шаблона нужно будет определить в отдельномфайл.Например:
// File "a_no_b.h"
class A
{
public:
template <typename T>
void f1();
};
// File "b_no_a.h"
class B
{
public:
template <typename T>
void f3();
};
// File "a.h"
#include "a_no_b.h"
#include "b_no_a.h"
template <typename T>
void A::f1()
{
// Use full definition of class B
}
// File "b.h"
#include "b_no_a.h"
#include "a_no_b.h"
template <typename T>
void B::f3()
{
// Use full definition of class A
}