J'ai lu un autre article sur cette erreur et j'ai vu le problème courant: il y a des méthodes virtuelles pures dans la classe des objets mais je n'en ai pas Je vois. Le message d'erreur est executive.h:13:44: error: invalid new-expression of abstract class type ‘List<std::__cxx11::basic_string<char> >’
ne peut pas déclarer le champ 'Executive :: history' comme étant de type abstrait
C'est le executive.h
private:
string command="";
List<string>* history = new List<string>();
int currentPosition=0;
public:
Executive(string filename);
~Executive();
void navigateTo(string url);
void forward();
void back();
string current() const;
void copyCurrentHistory(List<string>& destination);
void printHistory();
Le list.h
template <class T>
class List: public ListInterface<T>{
private:
int length;
Node<T>* head= nullptr;
public:
List();
~List();
bool isEmpty() const;
int getLength() const;
void insert(int newPosition, const T& newEntry) ;
void remove(int position) ;
void clear();
T getEntry(int position);
void setEntry(int position, const T& newEntry);
Node<T>* getNode(int postion);
Et ma classe où les méthodes virtuelles pures sont listInterface.h
template<class T>
class ListInterface
{
public:
virtual ~ListInterface() {}
virtual bool isEmpty() const = 0;
virtual int getLength() const = 0;
virtual void insert(int newPosition, const T& newEntry) = 0;
virtual void remove(int position) = 0;
virtual void clear() = 0;
virtual T getEntry(int position) const = 0;
virtual void setEntry(int position, const T& newEntry) = 0;
Je reçois aussi une note de mon compilateur disant t son mais je ne fais pas depuis parce qu'il dit c'est la ligne où mon nom de classe est.
list.h:11:7: note: because the following virtual functions are pure within ‘List<std::__cxx11::basic_string<char> >’:
class List: public ListInterface<T>{
Il est évident que ce n'est pas l'erreur de compilation. Si vous comparez, une par une, les méthodes abstraites dans la classe de base, avec l'implémentation dans la sous-classe, vous trouverez exactement une méthode dont la signature ne correspond pas. Votre devoir est d'apprendre à utiliser le mot clé 'override', ce qui permettra d'attraper cette erreur commune d'une manière beaucoup plus évidente. –