我正在尝试创建一个书店管理系统,允许我将以前创建的作者添加到数据库,创建书籍,然后将作者从数据库(这是一个std :: list)分配给一本书。 FindAdd函数应该迭代数据库中的作者列表并在其中查找给定对象(临时作者),然后将此对象添加到书籍的作者列表中。
我正在尝试将迭代器强制转换为一个对象,所以我可以添加作者,但是这行不允许我编译这个程序(没有匹配函数来调用Book :: AddAuthor(作者) *))。我试了没有铸造,但当然它不会起作用。我怎样才能解决这个问题?或者也许有一种更简单的方法来完成我在这里尝试做的事情?
class Author
{
private:
string name, lname;
public:
bool operator==(const Author & a) const
{
bool test=false;
if(!(this->name.compare(a.name) && this->lname.compare(a.lname)))
test=true;
return test;
}
Author(string namex, string lnamex)
{
name=namex;
lname = lnamex;
}
};
class Book
{
public:
list <Author> Authorzy;
string tytul;
void AddAuthor(Author & x)
{
Authorzy.push_back(x);
}
Book(string tytulx)
{
tytul = tytulx;
}
};
class Database
{
protected:
list <Author> authors;
public:
void AddAuthor(Author x)
{
authors.push_back(x);
}
list <Author> getAuthors
{
return authors;
}
};
void FindAdd(Author & x, Book &y, Database & db)
{
list <Author>:: iterator xx;
xx = find(db.getAuthors().begin(), db.getAuthors().end(), x);
if (xx != db.getAuthors().end())
y.AddAuthor(&*xx);
else cout << "Author not found";
}
int main(){
Author testauthor("test", "test");
Database testdb;
testdb.AddAuthor(testauthor);
Book testbook("Mainbook");
FindAdd(Author notfound("Another", "Guy"), testbook, testdb);
FindAdd(testauthor, testbook, testdb);
}
答案 0 :(得分:1)
AddAuthor
只需要Book
参考,所以你不需要做任何奇特的事情:
if (xx != db.getAuthors().end()) {
y.AddAuthor(*xx); // Just dereference the iterator and pass it
// in, c++ takes care of the rest
} else {
cout << "Author not found";
}