2017-11-21 17 views
2

Ich bin neu in C++. Ich habe einen B + Baum implementiert und es funktioniert gut auf Macbook (mit CLion), aber wenn ich es auf einem Ubuntu-Server ausführe gibt es den Kompilierungsfehler unten. Kann mir bitte jemand helfen?Fehler: keine übereinstimmende Funktion für Aufruf C++

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)’ 

Ergebnis g ++ -v auf Mac:

Konfiguriert mit: prefix =/Library/Developer/CommandLineTools/usr --with-Gxx-include-dir =/usr/include/C++/4.2.1 von Apple LLVM Version 9.0.0 (Klirren-900.0.38) Ziel: x86_64-Apfel-darwin16.7.0 Thread-Modell: Posix InstalledDir:/Library/Developer/CommandLineTools/usr/bin

Ergebnis von g ++ -v auf dem Ubuntu-Server:

gcc Version 5.4.0 20.160.609 (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.5)

Code-Snippet, wo Fehler ausgelöst:

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... 
} 

Antwort

3

ein std::vector mit Iteratoren Constructing erfordert sie Sei der gleiche Typ. Es sieht so aus, als ob Sie es mit einem vector<>::const_iterator und einem vector<>::iterator (über .end()) konstruieren.

Entweder einen nichtkonstanten Iterator verwenden oder .cend() verwenden.

Verwandte Themen