错误:没有用于调用C ++的匹配函数

时间:2017-11-21 01:26:55

标签: c++ c++11 stdvector

我是C ++的新手。我已经实现了一个B +树,它在Macbook上运行正常(使用CLion)但是当我在ubuntu服务器上运行它时,它会在下面给出编译错误。有人可以帮忙吗?

error: no matching function for call to 
‘std::vector<std::__cxx11::basic_string<char> 
>::vector(__gnu_cxx::__normal_iterator<const 
std::__cxx11::basic_string<char>*, 
std::vector<std::__cxx11::basic_string<char> > >, 
std::vector<std::__cxx11::basic_string<char> >::iterator)’

Mac上g ++ -v的结果:

配置: - prefix = / Library / Developer / CommandLineTools / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1 Apple LLVM 9.0.0版(clang-900.0.38) 目标:x86_64-apple-darwin16.7.0 线程模型:posix InstalledDir:/ Library / Developer / CommandLineTools / usr / bin

ubuntu服务器上g ++ -v的结果:

gcc版本5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.5)

引发错误的代码段:

    std::pair<InternalNode *, Node *> split(int order) {
    std::vector<float>::const_iterator old_dn_keys_end = keys.begin() + ceil(float(order) / 2) - 2;
    std::vector<std::string>::const_iterator old_dn_values_end = values.begin() + ceil(float(order) / 2) - 2;
    new_dn->keys = std::vector<float>(old_dn_keys_end + 1, keys.end());

   //**--- error here ---**
   new_dn->values = std::vector<std::string>(old_dn_values_end + 1, 
   values.end());
   //rest of the code...
}

1 个答案:

答案 0 :(得分:3)

使用迭代器构造std::vector要求它们是相同的类型。您似乎正在使用vector<>::const_iteratorvector<>::iterator(通过.end())构建它。

使old_dn_values_end成为非const迭代器或使用.cend()