我正在用C ++写一个基本的命令外壳,尽管进行了很多搜索,但仍无法解决此问题。当我尝试编译程序时,出现错误:
错误:没有匹配的函数可以调用 ‘std :: vector
> :: pop_back(std :: __ cxx11 :: string&)” times.pop_back(tmp);
有问题的代码是:
int runArgs(char** args, std::vector<std::string> &histData, std::vector<std::string> ×) {
...
// it's not a built-in command, so...
else {
auto before = std::chrono::high_resolution_clock::now();
if(fork()) { // I'm the parent
wait(NULL);
} else { // I'm the child
execvp(args[0], args);
// getting here means exec didn't work
std::cerr << "The program terminated because " << strerror(errno) << std::endl;
}
auto after = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> dur = after - before;
auto x = std::chrono::duration_cast<std::chrono::seconds>(dur);
std::string tmp = std::to_string(x.count());
times.pop_back(tmp);
}
似乎tmp已被声明为指针,而我正在尝试为向量赋予错误的数据类型。但是,我在此部分代码中没有使用任何指针。我试过使用双精度向量,但是会得到同样的错误。与通过引用传递矢量有关吗?还是我不明白什么是chrono :: duration :: count返回?还是完全其他?
答案 0 :(得分:2)
std::vector::pop_back()
方法删除 std::vector
中的最后一个元素。它不接受任何输入参数,但是您尝试将其传递给它。那就是编译器所抱怨的。
要将新元素添加到std::vector
的末尾,您需要改用std::vector::push_back()
方法:
times.push_back(tmp);