Создание объектов в куче через функцию класса

0
   Book book;
list<Book>* books;

string title;
string author;
int ISBN;

     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;
}

Здесь я создаю свои объекты книги в своем классе Administration, проблема, с которой я сталкиваюсь, - это когда я пытаюсь получить доступ к ним из другого класса, и говорит, что их нет.

Я немного почитал и понял, что я должен выделить объекты в кучу, используя динамическое управление памятью, есть ли способ сделать это в моем коде?

Любая помощь будет очень оценена.

  • 0
    Что заставляет вас думать, что это создает что-то в куче?
  • 0
    Нет, извините, я хочу добавить их в кучу, мой код в настоящее время не делает этого
Показать ещё 3 комментария
Теги:
memory
heap
allocation

3 ответа

3
Лучший ответ

Вот простой способ:

if (userInput == "yes")
{
   Book *newBook = new Book(); // <-- allocates a Book object on the heap
   cout << "What is the title of the book you want to enter?" << endl;
   [...]
   newBook->setTitle(title);
   [...]
   return *newBook;
}
  • 0
    Это именно то, что я искал, просто еще один быстрый вопрос, я теперь сделал мой list<Book> books указателем, чтобы хранить все мои книги, но я теперь получаю доступ к нарушению места чтения. Я обновил код до того, что у меня есть сейчас, вы знаете, почему это может быть?
  • 1
    @ user2757842 Вам нужен list<Book*> books , а не list<Book> *books . Два не одинаковы. Вы получаете нарушение прав доступа, потому что books - это указатель, а вы его не выделяете. С другой стороны, вы отбрасываете выделенную кучу Book * и назначаете ее экземпляру, выделенному как часть списка.
Показать ещё 2 комментария
2

вам нужно решить, хотите ли вы использовать book которая находится в вашем классе, или создать другую книгу или кучную копию вашей книги

если вам нужна другая книга, вам нужно будет использовать new оператора в начале

если вы хотите создать копию своей книги в куче:

return new Book(book)

1
Book* Administrator::addBook()
{
    Book *bookOnHeap = new Book();
    ....
    return bookOnHeap;
}
  • 0
    Это должно быть return bookOnHeap; нет?
  • 0
    Ваше возвращение имеет тип Book. Должна быть книга *. возврат bookOnHeap; будет правильно (т.е. также () неправильно).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню