Я не знаю о погоде, ваша проблема решена или нет, и я надеюсь, что она будет иметь.
Всякий раз, когда я сталкиваюсь с проблемой "Нет аргументов, которые зависят от параметра шаблона" Я переопределяю метод и вызываю функцию-член родительского класса.
Чтобы показать, что я имею в виду, рассмотрим класс ниже, который является шаблоном класса ADT
template <typename DataTypeOfNode>
class LinearList
{
public:
LinearList(){}
void addAtBeg(DataTypeOfNode data) {
//Inside implementation....
}
DataTypeOfNode removeFromFront() {
//Inside implementation....
}
// And many more useful methods
~LinearList(){}
};
Теперь, если вы унаследуете этокласс с базовым классом скажет "PriorityQueue" вот так
template <typename DataTypeOfNode>
class PriorityQueue : public LinearList<DataTypeOfNode>
{
public:
void enqueue(DataTypeOfNode data){
addAtBeg(data);
}
DataTypeOfNode dequeue(){
return removeFromFront() ;
}
PriorityQueue(){}
~PriorityQueue(){}
};
После компиляции вы получите ошибку вроде "Нет аргументов, которые зависят от параметра шаблона" для removeFromFront()
и addAtBeg()
методов, поскольку у них есть параметры шаблона.
Чтобы исправить эту ошибку, вам просто нужно переопределить эти методы и вызвать методы родительского класса, такие как
template <typename DataTypeOfNode>
class PriorityQueue : public LinearList<DataTypeOfNode>
{
public:
//Calling parent class methods
void addAtBeg(DataTypeOfNode data){
LinearList<DataTypeOfNode>::addAtBeg(data) ;
}
DataTypeOfNode removeFromFront(){
return LinearList<DataTypeOfNode>::removeFromFront() ;
}
void enqueue(DataTypeOfNode data){
addAtBeg(data);
}
DataTypeOfNode dequeue(){
return removeFromFront() ;
}
PriorityQueue(){}
~PriorityQueue(){}
};