Salve a tutti .. sto provando a realizzare una semplice pila .. che deriva con eredita di tipo private da una lista, (uso l'eredita` private in modo da poter usare solo dei metodi che delegano le funzioni membro private ereditate da list )
la definizione di list e` la seguente
codice:
template<typename NT>
class List{
public :
List(); // constructor
~List(); // destructor
void InsertAtFront( const NT & );
void InsertAtBack( const NT & );
bool removeFromFront( NT &);
bool removeFromBack( NT &);
bool isEmpty()const; // return true if list is empty
void print()const;
private:
ListNode<NT> *firstPtr;
ListNode<NT> *lastPtr;
//
ListNode<NT> * getNewNode( const NT &);
};
la classe Stack che e` eredita` con eredita` private e` la seguente :
codice:
#ifndef STACK_H
#define STACK_H
# include "list.h"
# include <iostream>
//using namespace std;
template<typename T>
class Stack :private List<T>
{
public :
void push(const T& value){
insertAtFront(value) ; }
bool pop(T&value){
return removeFromFront(value); }
bool isStackEmpty()
{
return isEmpty();
}
void printStack()const
{
print();
}
};
#endif
ora .. se commento il blocco di funzioni :
codice:
bool isStackEmpty()
{
return isEmpty();
}
void printStack()const
{
print();
}
fila tutto liscio .. crea una pila .. etc .. e anche con l'opzione -fpermissive la compilazione va a termine .. e il programma viene eseguito .. cio` nonostante riscontro i seguenti errori (che poi diventano warning se uso -fpermissive)
codice:
In file included from pila_client.C:3:
stack.h: In member function ‘bool Stack<T>::isStackEmpty()’:
stack.h:25: error: there are no arguments to ‘isEmpty’ that depend on a template parameter, so a declaration of ‘isEmpty’ must be available
stack.h:25: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
stack.h: In member function ‘void Stack<T>::printStack() const’:
stack.h:29: error: there are no arguments to ‘print’ that depend on a template parameter, so a declaration of ‘print’ must be available
qualcuno saprebbe gentilemnte illuminarmi in merito ??