const



  • Hi ich habe ein paar Probleme mit dem Schluesselwort const. Ich habe eine Funktion und je nachdem ob ich es weglasse oder nciht kompilierts oder nicht. ich hab allerdings keine Ahnung warum oder warum nicht. Folgendes:

    bool operator()(const string& word,string check) const {
    

    So klappt es.

    bool operator()(const string& word,string check) {
    

    So nicht

    bool operator()(const string& word,const string check) const {
    

    So auch nicht

    bool operator()(const string& word,string& check) const {
    

    Und so auch nicht.

    Sämtliche Kombinationen aus den "nicht klappenden" Beispielen klappen auch nicht.
    Natuerlich weiss ich wofuer const bzw. & gut sind, aber es ist mir nicht erklärlich warum es nicht funktioniert. Und mir ist nicht wirklich klar, wozu ich const hinter den Funktionkopf stelle also

    void foo()const{....
    

    Ich sende auch mal gleich den kompletten code mit, damit ihr wisst in welchem Zusammenhang das ganze ding läuft:

    #include<iostream>
    #include<functional>
    #include<fstream>
    #include<vector>
    #include<cctype>
    #include<iterator>
    #include<string>
    #include<algorithm>
    
    using namespace std;
    
    struct to_lower : public unary_function<char,char>{ //Lowers the chars
    char operator()(const char c){
      return tolower(c);
    }
    };
    
    template<typename IN,typename OUT, typename PRED>
    OUT copy_if (IN cont_beg, IN cont_end, OUT cont, PRED func){   //copy_if with algorithmus mit einer check Funktion func
      while(cont_beg!=cont_end){
          if(func(*cont_beg)){
    	*cont=*cont_beg;
    	++cont;
    	++cont_beg;
          }
        }
        return cont;
    }
    
    struct checker : public binary_function<string,string,bool>{ //Die Funktion zum checken
      bool operator()(const string& word,string check) const {   //Hierrum gehts!!!!
    for(string::iterator i=check.begin(); i!=check.end() ;++i){
    if(word[0]==(*i)) return true;
    return false;
    }
    }
    };
    
    int main(int argc, char* argv[]){ //O.K. hier nur wie alles aufgerufen wird.
      fstream file(argv[1]);
      if(!file)cout<<"ERROR"<<endl;
      string word;
    
      vector<string> vec;
      while(file>>word){
        transform(word.begin(),word.end(),word.begin(),to_lower());
        vec.push_back(word);
      }
    
    copy_if(vec.begin(),vec.end(),ostream_iterator<string>(cout,"\n"),bind2nd(checker(),"abc"));
    return 0;
    }
    

    MFG
    chewbo



  • Hinter dem Methodenkopf bedeutet const, dass die Methode den Zustand eines Objektes nicht ändert. Das heißt, diese Methode darf über eine const Referenz aufgerufen werden.

    Edit:
    Um die Iteration über Container mit const Referenzen "zu verheiraten", gibt es const_iterator.



  • Letztlich verrät Dir (und uns) der Compiler, warum er etwas nicht compilieren will ....
    Kein Forum kann Compiler-Meldungen ersetzen - aber es kann helfen, sie zu verstehen ... wenn man sie denn zur Verfügung stellt. 😉

    Gruß,

    Simon2.


Anmelden zum Antworten