为什么我无法使用push_back功能?
Why can't I use push_back function?
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&)'**
有人知道问题出在哪里吗?
对于std::vector<std::vector<string> >
,您需要push_back
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();
您的数据库将如下所示:
std::vector<Book> database;
database.push_back(b);
你的变量是向量的向量 (vector<vector<string> > &name
(,这似乎是一个层次到深度 - 你不能push_back
string
到这些,而只能是字符串的向量。
你想用这个实现什么?为什么不简单地使用vector<string> &name
,这应该可以正常工作?
当然,您正在尝试将字符串推送到向量向量中。
首先,为什么这些矢量是两层的?如果将它们更改为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()
。
从您的代码段中不清楚您要实现的目标。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 功能原型的目的
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?