У меня проблема с циклическими зависимостями с шаблонами классов. У меня есть что-то похожее на следующее:Циклические зависимости в шаблоне класса
// A.hxx
template<typename T>
class B;
template<typename T>
class C;
template<typename T>
class A
{
A(T const& x, T const& y, T const& z)
{
data[0] = x;
data[1] = y;
data[2] = z;
}
A(B<T> const& b) :
A(b.x(),b.y(),b.z())
{}
A(C<T> const& c) :
A(c.x(),c.y(),c.z())
{}
T x() {return data[0];}
T y() {return data[1];}
T z() {return data[2];}
T data[3];
};
// B.hxx
template<typename T>
class A;
template<typename T>
class C;
template<typename T>
class B
{
B(T const& y, T const& z, T const& x)
{
data[0] = y;
data[1] = z;
data[2] = x;
}
B(A<T> const& a) :
B(a.y(),a.z(),a.x())
{}
B(C<T> const& c) :
B(c.y(),c.z(),c.x())
{}
T x() {return data[2];}
T y() {return data[0];}
T z() {return data[1];}
T data[3];
};
// C.hxx
template<typename T>
class A;
template<typename T>
class B;
template<typename T>
class C
{
C(T const& z, T const& x, T const& y)
{
data[0] = z;
data[1] = x;
data[2] = y;
}
C(A<T> const& a) :
C(a.z(),a.x(),a.y())
{}
C(B<T> const& b) :
C(b.z(),b.x(),b.y())
{}
T x() {return data[1];}
T y() {return data[2];}
T z() {return data[0];}
T data[3];
};
Передовые декларации не работают. Я попытался сломать определения из декларации и включить соответствующий hxx-файл после объявления класса, но не повезло. Любая помощь будет оценена по достоинству. Спасибо
да, конечно вещь :) – armstrhu
вы можете поместить все 3 класса в том же заголовочный файл? –
Я заметил, что когда вы на самом деле определяете классы, вы забыли точку с запятой после закрытия. Может, проблема? –