创建指向其他对象的列表指针

时间:2013-11-24 23:14:41

标签: c++ function pointers

list<Book*> books;
list<Book>::iterator pos, last;

Book Administrator::addBook()
{
    Book *newBook = new Book();
    cout << "Would you like to enter a book?" << endl;
    cin >> userInput;
    cout << endl;

    if (userInput == "yes")
    {

        cout << "What is the title of the book you want to enter?" << endl;
        cin >> title;

        cout << "What is the author of the book you want to enter?" << endl;
        cin >> author;

        cout << "What is the ISBN of the book you want to enter?" << endl;
        cin >> ISBN;

        cout << endl;

        newBook->setTitle(title);
        newBook->setAuthor(author);
        newBook->setISBN(ISBN);
        newBook->setAvailability(true);

        books.push_back(newBook);

    }
    return *newBook;
}

void Administrator::printBookDetails()
{

    books.begin()->setPrevBook(NULL);
    for (pos = books.begin(); pos != books.end(); ++pos)
    {
        cout << pos->getTitle() << "\n"
            << pos->getAuthor() << "\n"
            << pos->getISBN() << "\n"
            << pos->getAvailability() << "\n"
            << "******************************" << endl;

        if (pos != books.begin())
        {
            last->setNextBook(&*pos);
            pos->setPrevBook(&*last);
        }
        last = pos;
    }
    books.back().setNextBook(NULL);

}

有人可以帮我完成这个项目,这些是我的两个功能addBookprintbookDetails。这些都在我的Admin类中。

我希望我在堆上创建的书籍存储在list< book*> books中,因为我想在另一个类中引用它们。

到目前为止,关于指针,我已经得到了一些帮助,我知道它与我有关,而不是将指针链接到正确的对象。

我的printBookDetails给了我麻烦,第一行books.begin()->setPrevBook(NULL);说我需要一个指向类的指针,但是当我放->时我仍然有错误。< / p>


Book Guest::searchBook(Book* search)
{

    string searchBook;
    cout << "What book would you like to search for?" << endl;
    cin >> searchBook;

    printBookDetails();


}

我喜欢做的就是使用我的Guest类上面的searchBook函数来稍后引用列表中的书籍,但是当我无法正确指出我的指针时。

有人可以让我走上正轨。

1 个答案:

答案 0 :(得分:2)

for (pos = books.begin(); pos != books.end(); ++pos)

这里,pos是一个迭代器,在你的列表上。迭代器就像列表条目的指针。 但是每个列表条目也是指向书籍的指针,而不是书本身。 因此,在尝试访问这些元素的成员函数时,您需要代码:(*pos)->getTitle()