Fehlermessage



  • Ich habe folgende Fehlermessage:

    request for member 'x' in (&entry)->std::basic_string<_charT,_Traints,_allox<::operator[] [with _CharT = char, _traits = std::char_traits<char>,_allox = std::allocator<char>](((unsigned int)i))', which is on non-class type char

    Diese wird im Code hier angezeigt:

    int entryVr::srchEntry(string entry){
        for(int i = 0;i<quantity;i++){
            string vsrchnick = entry[i].getNick();
            if(vsrchnick == entry)
                return 0;
        }
        return -1;
    }
    

    Die Klasse sieht so aus:

    class entryVr{
        private:
        int quantity;
        public:
        entryIfc *entry;
        entryVr() {rdEntry();}
        ~entryVr() {delete[] entry;}
        int srchEntry(string entry);
        void rdEntry();
        void entryDat();
    };
    

    Diese nimmt hier ihr Funktion her(entryIfc):

    [cpp]string getNick(){
            return nick;
        }
    
    string nick;
    

    Woran liegt der Fehler?

    Mit freundlichen Grüßen therma



  • Dieser Fehlermeldug kommt zustande, weil erstens dein string den du übergibst kein
    Array von String ist.
    Zweitens wie willst du das machen mi der Funktion entry.getNick();
    getNick ist keine Memberfunktion der Klasse String ?!



  • Cefour schrieb:

    Zweitens wie willst du das machen mi der Funktion entry.getNick();
    getNick ist keine Memberfunktion der Klasse String ?!

    Ich glaube, getNick() ist ein member von entryIfc.

    Greetz, Swordfish



  • Ich glaube, getNick() ist ein member von entryIfc

    korrekt.

    Dieser Fehlermeldug kommt zustande, weil erstens dein string den du übergibst kein
    Array von String ist.

    Wie meinst du das?

    Wie würde das Programm also richtig aussehen?



  • tu mir kurz 'nen Gefallen und versuch

    int entryVr::srchEntry(string entry_to_find)
    {
        for( int i = 0; i < quantity; i++ ) {
            string vsrchnick = entry[ i ].getNick( );
            if( vsrchnick == entry_to_find )
                return 0;
        }
        return -1;
    }
    

    Greetz, Swordfish



  • Gibts doch nicht.Da ändert sich doch nichts. Aber der Fehler kommt nicht mehr. Nun kommt nur noch expected ; before int und expected primary-expression before int.

    Das ist das int main

    void entryVr::entryDat(){
    {
    ...
    dof.close();
    }
    
    int main(){
        return 0;
    }
    


  • Hat sich erledigt: Dummheitfehler: int a(){
    {

    🙂



  • therma schrieb:

    Gibts doch nicht.Da ändert sich doch nichts. Aber der Fehler kommt nicht mehr.

    Dann schau nochmal ganz genau hin, was "entry" im ersten Fall ist (drei Zeilen über dem Fehler gucken!) und was "entry" im zweiten Fall ist.



  • Cefour schrieb:

    Dieser Fehlermeldug kommt zustande, weil erstens dein string den du übergibst kein
    Array von String ist.

    Was erstmal kein Problem wäre. Operator [] liefert dann die einzelnen Zeichen des Strings. therma hat nur nicht beachtet, dass der Funktionsparameter den Klassenmember verdeckt. Unterschiedliche Bezeichner oder explizit this-> beseitigen das Problem.



  • groovemaster schrieb:

    [...] therma hat nur nicht beachtet, dass der Funktionsparameter den Klassenmember verdeckt. Unterschiedliche Bezeichner oder explizit this-> beseitigen das Problem.

    Also ich wär in jedem Fall dafür, unterschiedliche Bezeichner für Member und Methodenparameter zu verwenden, da dies sich übersichtlicher ist und weniger fehleranfällig. Eventuell allen member Bezeichner den Präfix **m_**member verpassen.

    Greetz, Swordfish


Anmelden zum Antworten