2017-09-24 14 views
-2

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>{ 
+0

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. –

Répondre

0

T getEntry(int position); n'est pas une mise en œuvre pour virtual T getEntry(int position) const = 0;. Ajoutez const à la signature de la méthode.

+0

Merci beaucoup cela a résolu mon problème! –