Seit Tagen ungelöstes Problem - Klassen...



  • Nabbend! Hier ersma mein Code! 🙂

    //----------------------Hauptprogramm-----------------------------
    
    int main(int argc, char* argv[])
    {
        int menueeingabe;
        string zeichen, additionzahl;
        bool meldung_1, meldung_2;
    
        palindrom meinpalindrom;
    
        cout << "Willkommen beim Palindrom Programm!";
        cout << "\n" << "(1) Zeichenkette oder Zahl";
        cout << "\n" << "(2) Additionsverfahren";
        cout << "\n" << "Deine Eingabe: ";
        cin >> menueeingabe;
    
        switch ( menueeingabe )
            {
            case 1:
    
                // Eingabe wird "gelöscht", dann geht auch getline wieder!
                cin.seekg(0,ios::end);
                clrscr();
    
                cout << "Bitte eine Zahl oder ein Wort eingeben: ";
                // Es werden solange Zeichen eingelesen bis man RETURN drückt!
                // Auch Leerzeichen werden beachtet!
                getline( cin, zeichen );
                meinpalindrom.setZeichenfolge( zeichen );
    
                meldung_1 = meinpalindrom.zeichenpalindrom();
    
                cout << "\n" << zeichen << "wurde eingegeben...";
    
                // Wenn Meldung = "true" dann ist es ein Palindrom, sonst nicht!
                if ( meldung_1 == true )
                    cout << "\n\n" << meinpalindrom.getZeichenfolge() << "ist ein Palindrom!";
                else
                    cout << "\n\n" << meinpalindrom.getZeichenfolge() << "ist kein Palindrom!";
                break;
    
            case 2:
    
                // Hier soll mal das Additionsverfahren rein kommen! ^^
    
                break;
            case 3:
    
                break;
            default:
    
                break;
            }
    
        getch();
    }
    
    //------------------------Header-----------------------------
    
    #ifndef PALIN_H
        #define PALIN_H
        #include <conio.h> // für getch()
        #include <iostream.h> // für cout
        class palindrom
            {
            public:
                void setZeichenfolge( string );
                string getZeichenfolge( void );
    
                bool zeichenpalindrom( void );
                bool additionpalindrom( void );
    
            private:
                string zeichenpalin;
                int anfang, ende, maximum, i;
            };
    
    #endif
    
    //----------------CPP-Datei mit Methoden etc.-----------------------
    
    #include <conio.h> // für getch()
    #include <iostream.h> // für cout
    #include "Palin.h"
    
    void palindrom :: setZeichenfolge( string z )
        {
        zeichenpalin = z;
        }
    
    string palindrom :: getZeichenfolge( void )
        {
        return zeichenpalin;
        }
    
    bool palindrom :: zeichenpalindrom( void )
    {
        // Maximale Zeichenlänge
        maximum = zeichenpalin.length();
        // Anfangsindex
        anfang = 0;
        // Endindex
        ende = maximum - 2;
    
        // Zeichen werden hochgezählt...
        for ( i = 0; i < ende + 1; i++)
            {
            // Umwandlung von Groß in Kleinschreibung
            if ( zeichenpalin[i] >= 'A' && zeichenpalin[i] <= 'Z' )
                 zeichenpalin[i] = 'a' + (zeichenpalin[i] - 'A' );
            }
    
        // Leerzeichen werden "übersprungen"
        if ( zeichenpalin[i] == ' ' )
            {
            i++;
            }
    
        while( ende > anfang )
            {
            // Wenn das erste Zeichen nicht = das letzte Zeichen, dann brich ab!
            if( zeichenpalin[anfang] != zeichenpalin[ende] )
                {
                break;
                }
            // Alles was kein Buchstabe ist wird übersprungen
            do
                {
                anfang++;
                } while ( !isalpha( anfang ));
            // Ende um 1 verringert
            ende--;
            }
        // Wenn Ende größer als Anfang ist = KEIN Palindrom...
        if( ende > anfang )
            {
            return false;
            }
        // Ansonsten ist es ein Palindrom
        else
            {
            return true;
            }
    }
    
    bool palindrom :: additionpalindrom( void )
    {
        return true;
    }
    
    //---------------------------------------------------------------------------
    

    Naja mein Programm hat soweit geklappt, nur will ich jetz das Palindrom Addotitionsverfahren noch hinzufügen!

    Naja gesagt getan, Methode reingehauen...Un dann kam dieser tolle Fehler:

    [C++ Error] Palin.cpp(74): E2316 'palindrom::additionpalindrom()' is not a member of 'palindrom'

    Ich habe doch alles richtig gemacht oder? Ich such den Fehler jetzt schon seit Montag und finde ihn einfach nicht 🙄

    Need HELP! 😞



  • Du scheinst einen nicht mehr aktuellen Compiler zu verwenden, denn eigentlich heißt es nur noch (ohne .h):

    #include <iostream>
    

    Und du solltest wirklich nur die Header includen, welche auch wirklich benötigt werden (#include <conio.h> // für getch()).

    Außerdem wird in C++ (void) als Parameterdeklaration auch nicht verwendet, dort reicht ein einfaches ().

    Aber für dein Problem erst einmal irrelevant.

    Ich kann jetzt auch erstmal keinen Schreibfehler entdecken.
    Hast du mal dein Projekt komplett neu compiliert?



  • Kommentier die Deklaration und Definition mal aus, kompilier neu, dann entkommentiere die Deklaration und kompiliere.
    Vielleicht ist dein Compiler verbuggt, meine mich zu erinnern, mal sowas gehabt zu haben (Mit der alten VC++ 6.0)

    MfG



  • Ja ich hab Borland 5.0 Professional... 🙄

    Das gabs kostenlos vonner Schule 😉

    Auch neu compiliert etc habe ichs schon geschätzte 325236x... Ich bin am verzweifeln, weil irgendwie keiner das "Problem" findet 🙄

    €DIT: ICH HABS GEFUNDEN! Ich habe jetz die Includes aus den CPP Dateien rausgeholt und nurnoch in der Header stehn! 🙂

    JUUUHUUUUUUUUU! 😮



  • NephTis schrieb:

    €DIT: ICH HABS GEFUNDEN! Ich habe jetz die Includes aus den CPP Dateien rausgeholt und nurnoch in der Header stehn! 🙂

    Andersrum wärs besser. In den header solltest du wirklich nur die Includes einbauen die du dort auch brauchst, alles andere in die cpp. Ist bei STL-headern zwar nicht so unheimlich wichtig, gehört aber mit zum guten stil.
    Deswegen folgende Punkte:

    - die includes von conio.h und iostream.h aus dem header raus.
    - eine forward-Deklaration für class string in den header, oder falls du die std::strings benutzt den entsprechenden header <string> der Standardbibliothek includieren (kann man nicht fwd-deklarieren, weils n Typedef auf n Template ist)

    - die includes von conio.h und iostrem.h aus der cpp für die Plaindromklasse raus. Du benutzt auch dort weder cout noch getch()
    - includiere den header für std::isalpha() in die palin.cpp (müsste <cctype> sein) und benutze auch entsprechend std::isalpha() - isalpha() im globalen namensraum ist vermutlich aus einer C-Bibliothek und sollte dir vom Compiler eigentlich als deprecated (~veraltet) gemeldet werden (bzw. der Header dazu).

    - In der Datei mit der main() dann die <iostream> (nicht die <iostream.h>, die ist auch veraltet!) includen und std::cout sowie std::cin statt den Pendants im globalen Namespace verwenden
    - Wenns denn unbedingt getch() sein muss in der Datei mit der main() auch die <conio.h> includen, die auch veraltet und nicht portabel ist (gibts nur unter Windows beim Borland und MSVC Compiler). Lieber sowas wie std::cin.get() nutzen.



  • Wenn du nen kostenlosen + guten Compiler haben willst, wechsel auf Microsoft Visual C++ 2008 Express Edition oder auf eine Windowsvariante von GCC.


Anmelden zum Antworten