2012-02-20 55 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