welchen Funktionsparameter brauche ich?



  • ich habe folgendes Problem:
    ich habe die Klasse CodierterText:

    [cpp]
    class CodierterText
    {
          public:
                  CodierterText(int Seed) : seed(Seed) {srand(seed);liste = new Liste<char>;}
                  ~CodierterText(){delete liste;}
                  void codieren(Klartext *KT)
                  {
                       KT->liste->SetAnfang();
                       while(KT->liste->isValid())
                       {
                       this->liste->AddElement(char(int(KT->liste->get())+rand()%99+50));
                       KT->liste->inc();
                       }
                       this->liste->AddElement(char(int(KT->liste->get())+rand()%99+50));
                  }
                  Liste<char> *liste;
                  int seed;
          private:
                  CodierterText (const CodierterText&);
    
    };
    [/cpp]
    

    und will die Funktion codieren aufrufen:

    [cpp]
    CT->codieren(KT);
    [/cpp]
    

    jetzt kommt aber der Error:

    no matching function for call to `CodierterText::codieren(Klartext*&)'
    candidates are: void CodierterText::codieren(Klartext)
    

    CT und KT sind dynamisch angelegte Zeiger (CodierterText und Klartext)

    wie muss ich den Code ändern, damit es funktioniert? ich arbeite erst seit kurzem mit Zeigern, ich überseh wahrscheinlich wieder was.

    ein bisschen Selbstinitiative hab ich auch gezeigt und geguckt, was passiert, wenn ich aus

    [cpp]CT->codieren(KT);[/cpp]
    
    [cpp]CT->codieren(*KT);[/cpp]
    

    mache. dann gibts den Error:

    Dev-Cpp\include\c++\3.4.2\bits\ios_base.h `std::ios_base::ios_base(const std::ios_base&)' is private 
    within this context
    

    und zeigt auf die geänderte Zeile.



  • Die Fehlermeldung passt nicht zu der von dir geposteten Methode codieren. Sicher, dass Du den richtigen Code gepostet hast?



  • ja das ist der Code. soll ich den Rest ( klasse Klartext und Klasse Liste) auch noch dazuschreiben?



  • Was ist bei dir denn "Klartext"?



  • hier die Klasse Klartext:

    [cpp]
    class Klartext
    {
          public:
                  Klartext(const char *dName) : Dateiname(dName) 
                  {
                         liste = new Liste<char>;
                         KT.open(Dateiname, ios::in | ios::binary);
                         while(!KT.eof())
                               liste->AddElement(KT.get());
                  }
                  ~Klartext(){KT.close();delete liste;}
                  Liste<char> *liste;
    
          private:
                  Klartext(const Klartext&);
                  fstream KT;
                  const char *Dateiname;
    };
    [/cpp]
    


  • Von wem kommt denn der Ausschnitt? Das, was ich bisher sehen kann, ist schon ziemlich fubar.

    Warum std::list ?
    Warum kein std::string ?
    Warum mit new erzeugen?
    Was ist das für ein Gefrickeln in addElement ?



  • liste ist eine von mir geschriebene einfache Liste.
    warum kein std::string? stimmt, warum eigentlich nicht.
    warum mit new? warum nicht? (in der Klasse Liste ist noch ein kopierkonstruktor - privat)
    addElement gehört zu der Klasse Liste, und fügt ein Element in die Liste ein 😉



  • Clundsch schrieb:

    warum mit new? warum nicht? (in der Klasse Liste ist noch ein kopierkonstruktor - privat);)

    warum doch? Was hat der Kopierkonstruktor damit zutun? new braucht man für gewöhnlich bei dynamischer Bindung, sonst eigentlich nicht.



  • ok. das mit dem new hab ich verstanden, aber das löst das Problem leider auch nicht 😞

    EDIT: Das eigentliche Problem liegt ja in der Funktion codieren (bzw an den Parametern)



  • Clundsch schrieb:

    EDIT: Das eigentliche Problem liegt ja in der Funktion codieren (bzw an den Parametern)

    Es gibt da aber ein offensichtliches Missverhältnis zwischen deinem Compiler und dir. Er behauptet, es gäbe eine Funktion codieren(Klartext), du behauptest, es gäbe eine Funktion codieren(Klartext*). Einer von euch beiden ist buggy ...



  • Bashar schrieb:

    Einer von euch beiden ist buggy ...

    darüber musste ich schmunzeln 😉
    obwohl das dann ich wohl wieder bin...

    aber was heißt eigentlich das '&' hinter dem Sternchen?

    CodierterText::codieren(Klartext*&)
    


  • Clundsch schrieb:

    CodierterText::codieren(Klartext*&)
    

    OMG! Herr, hab erbarmen, schmeiß HIRN vom Himmel!



  • Clundsch schrieb:

    aber was heißt eigentlich das '&' hinter dem Sternchen?

    CodierterText::codieren(Klartext*&)
    

    Daß es sich um eine Referenz handelt.



  • sorry, aber das ist die Fehlermeldung (hab ich vergessen hinzuschreiben)


Anmelden zum Antworten