2016-10-25 10 views
1

Ich habe versucht, Vektoren zu verwenden, wie ich gerade angefangen habe zu studieren, aber steckte auf diesem Fehler fest. Ich habe versucht, cpp Referenz zu suchen und schrieb wie auf es, aber immer noch Fehler.Compiler-Fehler: Keine passende Funktion für den Aufruf zu finden

#include<vector> 
#include<iostream> 
#include<cstring> 
using namespace std; 
int main() 
{ 

vector<string> vec; 

vec.push_back("First"); 

vec.push_back("second"); 

for(int i = 0; i < 4 ; i++) 
    vec.push_back("RepeatTimes"); 

vector<string>::iterator fp = find(vec.begin(), vec.end(), "First"); 


for(vector<string>::iterator it = vec.begin(); it != vec.end(); it++)     cout<<*it<<" "; 

} 

Fehler ist:

[Error] no matching function for call to 'find(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, const char [6])' 
+2

Sie vermissen ein '#include '. Auch, [loszuwerden 'using Namespace std;'] (http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-consided-bad-practice). –

+0

@SamVarshavchik hat Recht. Bitte verwenden Sie 'namespace std;' nicht mehr. ' – amanuel2

+1

Sie müssen' 'einschließen Es sagt, dass es die Funktion nicht finden kann; nicht, dass es die Zeichenfolge nicht finden kann. Wahrscheinlich haben Sie std :: string indirekt von erhalten. –

Antwort

4

Sie haben vergessen, den <algorithm> Header wo std::find Leben aufzunehmen.

Sie sollten auch <string> für den Zugriff auf std::string einschließen.
Sie haben höchstwahrscheinlich <string> indirekt von einem anderen Header und sollten sich nicht darauf verlassen.


Da Sie lernen, werde ich weiter gehen, moderne Alternativen zu Ihrem Code vorschlagen.

  1. Statt Elemente wieder einen nach dem anderen drängen,

    std::vector<std::string> vec; 
    vec.push_back("First"); 
    vec.push_back("second"); 
    

    Sie können die Initialisierung Listen verwenden:

    std::vector<std::string> vec {"First", "Second"}; 
    
  2. Statt eine for Schleife verwenden, um wiederholt das gleiche Element hinzufügen ,

    for(int i = 0; i < 4 ; i++) 
        vec.push_back("RepeatTimes"); 
    

    können Sie die Insert-Methode verwenden:

    vec.insert(vec.end(), 4, "RepeatTimes"); 
    
  3. Betrachten Typnamen herzuleiten, wenn sie ausführliche sind und jede Lesbarkeitswert auf den Code nicht hinzufügen:

    auto fp = std::find(vec.begin(), vec.end(), "First"); 
    
  4. Verwendung bereichsbasierte for Schleifen, wenn über den gesamten Bereich des Behälters Iterieren:

    for (auto it: vec){ 
        std::cout << it << " "; 
    } 
    
+0

4. Eine Alternative ist std :: for_each mit Lambda-Funktion :) –

Verwandte Themen