2014-03-05 95 views
0

我的節點類的微光,並從中C++類在層次結構沒有數據成員

class node 
{ 
    public: 
    node(); 
    ~node(); 
    node *& getNext(); 
    protected: 
    node * next; 
}; 

class word: public node 
{ 
    public: 
    word(); 
    ~word(); 
    protected: 
    char ** words; //an array of char pointers 
}; 

派生的類,我有

class sentence 
{ 
    public: 
     sentence(); 
     ~sentence(); 
     void insert(node *& head, char *& word_to_add); 
     sentence *& operator+=(char *& sentence_to_add); 
     void remove(char *& word_to_remove); 
     void testing(sentence *& s); 
     void display(); 
     void removeAll(); 
    protected: 
     node * head; 
}; 

這裏另一個類是我實現的插入功能

void sentence::insert(node *& head, char *& word_to_add) 
{ 
    if(!head) 
    { 
     head = new word; 
     insert(head, word_to_add); 
    } 
    else 
    { 

     for(int i = 0; i < MAX_WORD; ++i) 
     { 
      if(!head->words[i]) 
      { 
       head->words[i] = new char[strlen(word_to_add)+1]; 
       strcpy(head->words[i], word_to_add); 
       cout << head->words[i] << endl; 
       return; 
      } 
     } 
     insert(head->getNext(), word_to_add); 
    } 
} 

我收到錯誤類節點沒有數據成員命名的單詞。但是,如果我要將原型void insert(node *& head, char *& word_to_add);更改爲void insert(word *& head, char *& word_to_add);,它會說該單詞下一個沒有數據成員。我有點卡住了,因爲我在之前的程序中這樣做,它工作得很好。我想知道我做錯了什麼,所以如果有人能指出這一點,那會很棒!

編輯:我忘了,包括我使用的類單詞朋友關鍵字。出於測試目的。 friend class sentence;

回答

1

我不會從節點類派生。

具有節點是通用的,並且包含指針,而不是在節點直接具有數據的一些數據(字)?

class node 
{ 
    node* next; 
    word data; 
}; 

class word 
{ 
    char** words; 
}; 

既然你標記這個C++,我可能會建議您使用標準C++集合(的std ::向量),而不是一個鏈表。

+0

我創建了自己的數據結構,並將節點類用作多個類的基類。 – ZZPLKF

+0

可能更適合使用模板和組合而不是繼承。 –