为什么不能使用push_back函数?

时间:2018-08-20 13:32:26

标签: c++ stdvector push-back

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&)'**

有人知道出什么问题吗?

3 个答案:

答案 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()

从您的摘要中不清楚您要实现的目标。