I have a problem with circular dependencies with template classes. I have something similar to the following:
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];
};
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];
};
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];
};
Advanced declarations do not work. I tried to break the definitions from the declaration and include the corresponding hxx file after the class declaration, but no luck. Any help would be greatly appreciated. Thanks
source
share