Witam.
Mam sobie template InstancesController, który posiada parę metod statycznych. Służy on do kontrolowania liczebności utworzonych instancji klasy.
template<class T>
class InstancesController
{
public:
InstancesController() ;
virtual ~InstancesController() ;
static const unsigned getNumberOfInstances() ;
static const unsigned getNextIndex() ;
static InstancesController<T> *getInstance(unsigned index) ;
static void clear() ;
private:
static std::map<unsigned, InstancesController<T>*> instances ;
static unsigned nextIndex ;
const unsigned index ;
};
Mam też 2 testowe klasy:
class A : public InstancesController<A>
{
public:
A(){}
virtual ~A(){}
};
class B : public InstancesController<B>, protected A
{
public:
B(){}
virtual ~B(){}
};
gdy w testach chcę wywołać np. B::clear() dostaję:
test/suite/InstancesControllerTest.cpp: In member function ‘virtual void<unnamed>::InstancesController_DerivingTest_Test::TestBody()’:
test/suite/InstancesControllerTest.cpp:70: error: reference to ‘clear’ is ambiguous
src/tools/InstancesController.h:84: error: candidates are: static void InstancesController<T>::clear() [with T = InstancesControllerHelpers::A]
src/tools/InstancesController.h:84: error: static void InstancesController<T>::clear() [with T = InstancesControllerHelpers::B]
Właściwie czemu? Przecież B dziedziczy po A protected, więc z poziomu testu A::clear() nie powinno być widoczne...
Dzięki za wszelkie podpowiedzi