我的代碼崩潰與段錯誤,我真的不知道錯誤的位置。當我們將它們作爲參數傳遞時,我仍然在學習指針的方法。這是應該對此重要的代碼。當我運行issueBook()
函數時發生段錯誤。Segfault與Qt C++
IssuedBooks.h
#ifndef ISSUEDBOOKS_H
#define ISSUEDBOOKS_H
#include "ClientList.h"
#include "BookList.h"
#include <QMultiMap>
class IssuedBooks {
public:
IssuedBooks() {}
~IssuedBooks();
void issueBook(Client*, Book*);
void returnBook(Client*, Book*);
ClientList getClients() const;
BookList getClientBooks(Client*) const;
private:
QMultiMap<Client*, Book*> issuedBooks;
};
#endif
IssuedBooks.cpp
#include "IssuedBooks.h"
#include <qDebug>
IssuedBooks::~IssuedBooks(){
qDeleteAll(issuedBooks);
issuedBooks.clear();
}
void IssuedBooks::issueBook(Client* c, Book* b){
if(!issuedBooks.contains(c, b)){
issuedBooks.insert(c, b);
}
}
void IssuedBooks::returnBook(Client* c, Book* b){
if(issuedBooks.contains(c, b)){
issuedBooks.remove(c, b);
}
}
ClientList IssuedBooks::getClients() const{
QMapIterator<Client*, Book*> itr(issuedBooks);
ClientList clients;
while(itr.hasNext()){
itr.next();
clients.addClient(itr.key());
}
return clients;
}
BookList IssuedBooks::getClientBooks(Client* c) const{
QMapIterator<Client*, Book*> itr(issuedBooks);
BookList books;
while(itr.hasNext()){
itr.next();
if(itr.key() == c){
books.addBook(itr.value());
}
}
return books;
}
LibraryDriver.cpp
#include "ClientList.h"
#include "BookList.h"
#include "IssuedBooks.h"
#include <QtGui>
#include <QtWidgets>
QTextStream cout(stdout);
int main(int argc, char* argv[]){
QApplication app(argc, argv);
BookList bookList;
ClientList clientList;
IssuedBooks issueList;
Book* b = new Book("Nick Corin", "An awesome life.", 59.99);
bookList.addBook(b);
Client* c = new Client("Nick Corin", QDate::currentDate());
clientList.addClient(c);
issueList.issueBook(c, b);
}
你有沒有試過GDB找出它爲什麼崩潰? – fceller
你的'問題書'看起來不錯,所以錯誤是在別的地方。 – SingerOfTheFall
有人評論問app.exec(),但現在我找不到評論?事實上,事實證明是由於某種原因? 我添加app.exe()到我的主要功能的結尾,我所有的問題都消失了?任何想法爲什麼? – nickcorin