2012-02-20 81 views
0

對不起,這是一個相當大的問題。我不能讓下面的C++的工作,我總是得到關於從visiual工作室的代碼沒有一個struct /類/聯合錯誤。我應該按照字母順序將書放入鏈接列表中,但到目前爲止,我的插入方法已損壞。鏈表的插入,刪除,排序

//******************************************************************** 
    // BookList.cpp 
    // 
    // Represents a collection of books. 
    //******************************************************************* 
    #include "BookList.h" 

    //---------------------------------------------------------------- 
    // Creates a new Book object and adds it to the end of 
    // the linked list. 
    //---------------------------------------------------------------- 
    void BookList::add(Book *newBook) { 

    BookNode *node = new BookNode(newBook); 
    BookNode *current; 

    if (head == NULL) 
    head = node; 
    else { 
     current = head; 
     while (current->next != NULL) { 
      current = current->next; 
     } 
     current->next = node; 
    } 
    } 

    char *BookList::getBookList(char *list) { 

     list[0] = '\0'; 
     BookNode *current = head; 

     while (current != NULL) { 
      strcat(list, current->book->getBook()); 
      strcat(list, "\n"); 
      current = current->next; 
      } 

     return list; 
     } 

    void BookList::insert(Book *newBook) { 
     BookNode *node = new BookNode(newBook); 
     BookNode *current; 

     if (head == NULL) { 
    head = node; 
     } 
     else { 
      current = head; 
      int result = *newBook.compareTo(current->book->getBook()); 
      if (result == -1) { 
       current->next = node; 
       } 
      else { 
       while (result == 1) { 
        current = current->next; 
        result = *newBook.compareTo(current->book->getBook()); 
     } 
    current->next = node; 
    } 
    } 
    } 

    //******************************************************************** 
    // BookList.h 
    // 
    // Represents a collection of books. 
    //******************************************************************* 
    #include "Book.h" 

    class BookNode { 
     public: 
      BookNode() { }; 
      BookNode(Book *theBook) { 
      book = theBook; 
      next = NULL; 
      }; 
      friend class BookList; 

     private: 
      Book *book; 
      BookNode *next; 
    }; 

    class BookList { 
     public: 
      void add(Book *); 
      char* getBookList(char *); 
     void delet(Book *); 
     void insert(Book *); 
      BookList() { 
      head = NULL; 
      }; 

     private: 
      BookNode *head; 

    }; 

    #include <cstring> 

    //******************************************************************** 
    // Book.h 
    // 
    // Represents a single book. 
    //******************************************************************* 

    class Book { 

     public: 
      Book (char *newTitle) { 
      strcpy(title, newTitle); 
      } 

      int compareTo(Book *newBook) { 
       int compvar; 
         compvar = strcmp(newBook->getBook(), title); 
         return compvar; 
      } 

      char *getBook() { 
      return title; 
      } 

     private: 
      char title[81]; 

     }; 

當然,還有許多問題與此代碼,所以任何幫助任何人都可以提供將是真棒。提前致謝!

+1

它是否給一個行數看?如果是這樣,你能否在來源中指出有問題的路線?這會有很大的幫助。 – Anthony 2012-02-20 22:15:35

+0

你想要[代碼評論](http://codereview.stackexchange.com),還是有一個你可以描述的具體問題? – Useless 2012-02-20 22:15:51

+1

如果不調試它,你不應該讓它變大。 *永遠不要添加到不起作用的代碼。* – Beta 2012-02-20 22:16:08

回答

1

這行代碼是錯誤的(兩行,看起來就像這樣):

int result = *newBook.compareTo(current->book->getBook()); 

如果取消引用,使用它周圍括號:

int result = (*newBook).compareTo(current->book->getBook()); 

而是使之更易於閱讀,我建議:

int result = newBook->compareTo(current->book->getBook()); 

這將顯示你真正的問題:的compareTo()期待一個書object和getBook()返回一個char *。使用以下,它編譯罰款給我。如果沒有使用這些類的主函數,我無法告訴您,您的代碼邏輯上是否正常工作,但現在編譯好了。

你真的應該在超載的Book.h相等運算的比較。希望這可以幫助。

+1

謝謝!每個人的幫助對於使這個計劃重新運作起來都非常有幫助,但是你卻是最大的難題。再次感謝! – TheDawg 2012-02-27 03:02:49

1

好了,跳出我的邏輯錯誤是,你絕不會說

node->next = current->next 

current->next = node 

當然,也有鏈表STL庫,沒有邊界檢查在打印功能(這也許應該使用的std :: string反正),這從來沒有清理它分配內存...但我認爲這是一個介紹編程任務。如果沒有定義delet()方法,你將無法實例化你的類。

0

你需要開始宣佈BookNode類之前,你有你的BookNode類的定義裏面的線friend class BookList;添加BookList類的前向聲明。

更改如下:

//******************************************************************** 
// BookList.h 
// 
// Represents a collection of books. 
//******************************************************************* 
#include "Book.h" 

class BookNode { 

這樣:

//******************************************************************** 
// BookList.h 
// 
// Represents a collection of books. 
//******************************************************************* 
#include "Book.h" 

class BookList; 

class BookNode { 

沒有這一點,編譯器會抱怨BookList不是一個結構/類/聯合。

很明顯,你必須在你的代碼,以擺脫對方編譯器錯誤的這樣做了。

+0

謝謝!這是我的程序無法工作的原因之一。 – TheDawg 2012-02-27 03:03:50