Reputation: 3213
I have a nested and inherited structure like this.
template <typename U, typename T, typename _Prd = equal_to<T> >
class Octree
{
...
private :
BBox<T,3,_Prd> bounds ;
void SplitNode() ;
virtual bool isSplit () ;
...
};
template <typename U, typename T, typename _Prd = equal_to<T> >
class Hull
{
...
//nest the octree class here
class OcHull: public Octree<U, T, _Prd>
{
bool isSplit () ;
};
OcHull * GetOcHull() const ;
private:
OcHull * hullstructure ;
};
And when I want to visit the bounds variable in OcHull, compiler doesn't see it has this variable.
template <typename U, typename T, typename _Prd>
bool Hull<U,T,_Prd>::OcHull::isSplit()
{
assert(typeid(double) == typeid(T)) ;
// for each possible view of currect cell
for (size_t i = 0 ; i < camera_array.size() ; ++i)
{
//project centre of the cell
// bounds is not detected. bound is meant to be inherited from BBox<T,3,_Prd> bounds ; above
Vec<double,2> projectedP = camera_array[i].projectToCamPlane(bounds.centre) ;
...
}
}
Error is
Hull.hpp:84: error: ‘bounds’ was not declared in this scope
Could you please tell me why it doesn't see bounds ?
Upvotes: 3
Views: 153
Reputation: 320641
Base classes that depend on template parameters are not considered by unqualified name lookup.
You are using unqualified name bounds
. And the base class Octree<U, T, _Prd>
depends on template parameters. So, the contents of the base class is not considered by the compiler and bounds
is not found.
You can solve it in several ways.
Use a qualified name when referring to bounds
Octree<U, T, _Prd>::bounds
Access bounds
through this->
this->bounds
Add a using
declaration of bounds
to the derived class
class OcHull: public Octree<U, T, _Prd>
{
using Octree<U, T, _Prd>::bounds;
...
Upvotes: 3
Reputation: 53319
You need to say this->bounds
or Octree<U, T, _Prd>::bounds
. In C++, when a class template inherits from another class template, the template base class is not instantiated during the first compilation pass, so the inherited members must be accessed with an explicit qualifier.
See this answer for a more elaborate explanation.
Upvotes: 4