void Add(vector< vector<string> > &name,
vector< vector<string> > &author,
vector< vector<string> > &pub,
int &total_books)
{
Line();
string book_name,book_author,book_pub;
cout << "Please enter the book name: ";
cin >> book_name;
cout << "Please enter the author name: ";
cin >> book_author;
cout << "Please enter the publisher name: ";
cin >> book_pub;
name.push_back(book_name);
author.push_back(book_author);
pub.push_back(book_pub);
++total_books;
cout << "The book has been successfully added.";
}
编译器这样说:
[Error] no matching function for call to
'std::vector<std::vector<std::basic_string<char> >>::push_back(std::string&)'**
有人知道出什么问题吗?
答案 0 :(得分:4)
使用std::vector<std::vector<string> >
,您需要push_back
的{{1}}实例。
示例:
std::vector<string>
在您的情况下,更好的解决方案是使用字段创建结构,而不是使用并行向量。
std::vector<string> many_strings;
std::vector<std::vector<string> > matrix_of_strings;
many_strings.push_back("Sid");
many_strings.push_back("Alice");
many_strings.push_back("Bob");
matrix_of_strings.push_back(many_strings);
然后可以添加输入功能:
struct Book
{
std::string title;
std::string author;
std::string publisher;
};
您的输入过程可能如下所示:
struct Book
{
//...
void input_from_user();
};
void Book::input_from_user()
{
std::cout << "Enter book title: ";
std::getline(title);
std::cout << "Enter book author: ";
std::getline(author);
std::cout << "Enter book publisher: ";
std::getinle(publisher);
}
您的数据库如下所示:
Book b;
b.input_from_user();
答案 1 :(得分:0)
您的变量是向量(vector<vector<string> > &name
)的向量,它似乎很深-您不能push_back
string
进入向量,而只能是字符串向量。 / p>
您要完成什么?为什么不简单地使用vector<string> &name
呢?
答案 2 :(得分:0)
当然,您正在尝试将字符串推入向量的向量中。
首先,为什么这些向量是两层的?如果将它们更改为vector<string>
,则无需进行其他更改(在此片段中)。
void Add(vector<string> &name, vector<string> &author, vector<string> &pub);
接下来,如果由于某种原因您仍然需要将它们设为双层,那么可以将新字符串作为单例插入:
name.push_back({book_name});
(在较旧的标准中可能需要更多详细信息:
author.push_back(vector<string>(1, book_author));
或将它们添加到vector的最新元素中:
pub.back().push_back(book_pub);
也许,在后一种情况下,您首先需要检查大向量是否不为空,所以有一个back()
。
从您的摘要中不清楚您要实现的目标。