Я странная проблема, которую я не могу понять, если кто-то может указать мне в правильном направлении, это было бы очень полезно. Я создаю свои собственные связанные переменные списка в куче, но когда я иду добавить к нему другую переменную, все они уничтожаются, и я не хочу знаю, почему. в моем основном я создал свои переменные, как это
main.cpp
Book* temp;
temp = bookSetUp();
это относится к другой cpp, называемой функциями, которая устанавливает такие объекты:
functions.cpp
Book* bookSetUp()
{
//The items that populate the list
Book* a= new Book("A Tale of Two Cities", "Charles Dickens", "1", true);
Book* b= new Book("Lord of the rings", "J.R.R Tolkein", "2", true);
Book* c= new Book("Le Petit Prince", "Antoine de Saint-Exupéry", "3", true);
Book* d= new Book("And Then There Were None", "Agatha Christie", "4", true);
Book* e= new Book("Dream of the Red Chamber","Cao Xueqin","5", true);
Book* f= new Book("The Hobbit","J.R.R Tolkein","6", true);
//sets up the pointers between books
a->setPrev(NULL);
a->setNext(b);
b->setPrev(a);
b->setNext(c);
c->setPrev(b);
c->setNext(d);
d->setPrev(c);
d->setNext(e);
e->setPrev(d);
e->setNext(f);
f->setPrev(e);
f->setNext(NULL);
//sets up a temp pointer to a
Book* temp = a;
//returns the temp pointer to a
return temp;
}
это работает отлично, но позже, когда я снова добавляю в список, используя:
main.cpp
else if(checkRegUser(username, password, regUserList) == true)
{
int choice = 99;
cout << "Welcome Registered user: "<< username << endl;
while(choice != 0)
{
//this is so the print will start everytime as if you run it once print will be at NULL thereafter
Book* print = temp;
choice = options();
if(choice == 1)
{
while(print!=NULL)
{
cout<<"Name: "<<print->getName()<<endl<<"Author: "<<print->getAuthor()<<endl<<"ISBN: "<<print->getISBN()<<endl<<"Availability: "<<print->getAvail()<<endl;
cout<<endl;
print = print->getNext();
}
print = temp;
}
if(choice == 2)
{
search(temp);
}
if(choice == 3)
{
takeOut(temp);
}
if(choice == 4)
{
returnBack(temp);
}
if(choice == 5)
{
append(temp);
}
if(choice == 6)
{
cout<<"Sorry you have the privilege needed to use this function."<<endl;
}
if(choice == 7)
{
choice = 0;
}
}
}
Мои пользовательские переменные будут уничтожены. Я отлаживался, и они просто исчезли, я не уверен, почему!
В любом случае, это необходимо для моей функции add(), потому что я чувствую, что мне может быть что-то маленькое или просто совершить катастрофическую ошибку. Моя функция добавления находится в функции functions.cpp, и я знаю, что все ссылки работают, поскольку у меня есть все остальное, кроме этого
functions.cpp
Book* append(Book* tempParam)
{
string title;
string author;
string isbn;
bool avail;
cout<<"What is the book called?"<<endl;
cin.clear();
cin.ignore();
getline(cin, title);
cout<<"Who is the author?"<<endl;
cin.clear();
cin.ignore();
getline(cin, author);
cout<<"What is the ISBN to be?"<<endl;
cin>>isbn;
Book* temp = new Book(title, author, isbn, true);
Book* list = tempParam;int count;
while(list!=NULL)
{
if(list->getNext()==NULL&&list->getName()!=title)
{
list->setNext(temp);
temp->setNext(NULL);
temp->setPrev(list);
cout<<"Your book has been added"<<endl;
cout<<temp->getName()<<temp->getAuthor()<<endl;
}
list = list->getNext();
}
tempParam = list;
return tempParam;
}
Мои пользовательские классы отлично работают, когда я иду добавить, что мой список уничтожен любыми идеями?
* Я думаю, что ошибка найдена в этом разделе кода:
list->setNext(temp);
Вы "теряете" книги, потому что не сохранили их, прежде чем изменять list-> далее. *
Ответ неверен, потому что условный оператор гарантирует, что он является последним элементом списка. Сожалею!
add
илиappend
? Не могли бы вы подготовить минимальный полный пример ?