kostenloser Webspace werbefrei: lima-city


C++: Problem mit Klassen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    maja

    maja hat kostenlosen Webspace.

    Also ich h?nge gerade an einem Programm und zwar folgende:


    #include <iostream.h>
    #include <conio.h>

    //---------------------------------------------------------------------------
    class Arbeiter
    {
    int GetAlter()const;
    void SetzeAlter(int Alt);
    int GetArbeitsjahre()const;
    void SetzeArbeitsjahre(int Ajahre);
    int GetLohn()const;
    void SetzeLohn(int Geld);

    private:
    int Alter;
    int Arbeitsjahre;
    int Lohn;
    } ;


    //Elementfunktion um Alter zu setzen

    void Arbeiter::SetzeAlter(int Alt)
    {
    Alter=Alt;
    }


    //Elementfunktion um Arbeitsjahre zu setzen

    void Arbeiter::SetzeArbeitsjahre( int Ajahre)
    {
    Arbeitsjahre=Ajahre;
    }


    //Elementfuntkion um Lohn zu setzen
    void Arbeiter::SetzeLohn(int Geld)
    {
    Lohn=Geld;
    }

    //----------------------HAUPTPROGRAMM--------------------------------------


    int main()
    {
    //definieren von zwei Klassenobjekten (Katja und Thomas)
    Arbeiter Thomas;
    Arbeiter Katja;

    //Alter von Katja und Thomas setzen

    Thomas.SetzeAlter(23);
    Katja.SetzeAlter(22);

    //Arbeitsjahre

    Thomas.SetzeArbeitsjahre(0);
    Katja.SetzeArbeitsjahre(1);

    //Lohn
    Thomas.SetzeLohn(72);
    Katja.SetzeLohn(0);

    //ausgabe der daten von Thomas

    cout<< "Thomas ist " << Thomas.GetAlter()<< " Jahre alt. Sie arbeitet seit ";
    cout<< Thomas.GetArbeitsjahre()<<" und verdient "<< Thomas.GetLohn();

    cout<<"\n\nKatja ist "<< Katja.GetAlter()<< " Jahre alt. Sie arbeitet seit";
    cout<<Katja.GetArbeitsjahre()<<" und verdient "<<Katja.GetLohn();

    getch();
    return 0;
    }
    //---------------------------------------------------------------------------


    Jedoch gibt der Compiler dauernd Fehler auf und zwar folgende:

    [C++ Fehler] arbeiterklasse.cpp(54): E2247 Zugriff auf 'Arbeiter::SetzeAlter(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(55): E2247 Zugriff auf 'Arbeiter::SetzeAlter(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(59): E2247 Zugriff auf 'Arbeiter::SetzeArbeitsjahre(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(60): E2247 Zugriff auf 'Arbeiter::SetzeArbeitsjahre(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(63): E2247 Zugriff auf 'Arbeiter::SetzeLohn(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(64): E2247 Zugriff auf 'Arbeiter::SetzeLohn(int)' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(68): E2247 Zugriff auf 'Arbeiter::GetAlter() const' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(69): E2247 Zugriff auf 'Arbeiter::GetArbeitsjahre() const' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(69): E2247 Zugriff auf 'Arbeiter::GetLohn() const' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(71): E2247 Zugriff auf 'Arbeiter::GetAlter() const' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(72): E2247 Zugriff auf 'Arbeiter::GetArbeitsjahre() const' nicht m?glich
    [C++ Fehler] arbeiterklasse.cpp(72): E2247 Zugriff auf 'Arbeiter::GetLohn() const' nicht m?glich

    Irgendwie ist mir nicht ganz klar, weshalb er nicht auf die einzelnen Funktionen zugreifen kann. Vielleicht kann mir ja jemand von euch helfen, wahrscheinlich ist es nur so nen doofer Fehler, wo ich den Wald vor lauter B?umen nicht sehe, aber ich habe das Programm, schon fast 20 mal durchgelesen und komme einfach nicht drauf.
    PS: Das ganze habe ich im BorlandBuilder Version 6 geschrieben
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 0******a

    Du musst explizit angeben, welche Memberfunktionen bzw. Membervariablen ?ffentlich verf?gbar sind. Ohne Angabe werden alle(!) Funktionen bzw. Variablen vom Compiler als private eingestuft.

    Also:
    -----------------------------------------------------
    class Arbeiter
    {
    public:????????????????????????// das ist die fehlende Zeile bei Dir
    ???int GetAlter()const;
    ???void SetzeAlter(int Alt);
    ???int GetArbeitsjahre()const;
    ???void SetzeArbeitsjahre(int Ajahre);
    ???int GetLohn()const;
    ???void SetzeLohn(int Geld);

    private:
    ???int Alter;
    ???int Arbeitsjahre;
    ???int Lohn;
    };
    -----------------------------------------------------

    Finde ich ?brigens gut, das du Memberfunktionen mit dem const Modifier erstellst. Machen die wenigsten, obwohl es merh als sinnvoll ist.
  4. @ 0-checka: Theoretisch ist der default-Wert bei Klassen public und bei Strukturen private. Aber nicht alle Compiler halten sich 100%ig an diesen Standart.

    Wahrschein verwendest du einfach einen Compiler, der (vielleicht als erzieherische Ma?nahme) standartm??ig alles als private annimmt.
  5. Autor dieses Themas

    maja

    maja hat kostenlosen Webspace.

    hm, scheint wohl so, dass war wohl mal wieder so ein fehler f?r den ich mich verstecken sollte. nur was ich lustig finde, jetzt wird mir etwas ganz anderes ausgespuckt und das obwohl ich public jetzt eingesetzt habe und neu gespeichert habe....

    neue Fehlermeldung:

    [Linker Fehler] Unresolved external 'Arbeiter::GetAlter() const' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\KATJA\EIGENE DATEIEN\FH\MDP3 PR?FUNG\CLASS\ARBEITERKLASSE.OBJ
    [Linker Fehler] Unresolved external 'Arbeiter::GetLohn() const' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\KATJA\EIGENE DATEIEN\FH\MDP3 PR?FUNG\CLASS\ARBEITERKLASSE.OBJ
    [Linker Fehler] Unresolved external 'Arbeiter::GetArbeitsjahre() const' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\KATJA\EIGENE DATEIEN\FH\MDP3 PR?FUNG\CLASS\ARBEITERKLASSE.OBJ

    PS: das mit const, habe ich mir selbst mit beigebracht. mein professor hat uns nie eingebl?ut diese funktionen als const zu deklarieren. ich habe das mal irgendwo gelesen und seit dem wende ich es immer an. ist sicherer. ;)
  6. 0******a

    moglie schrieb:
    Theoretisch ist der default-Wert bei Klassen public und bei Strukturen private. Aber nicht alle Compiler halten sich 100%ig an diesen Standart.

    Stimmt nicht. Bei Strukturen ist eh nicht private, weil es das dort gar nicht gibt. Und bei Klassen sind alle nicht spzifizierten Elemente (Variablen und Funktionen) automatisch als private deklariert. Ich kenne keinen Compiler, der das anders handhabt. Und so ist es auch Vorgabe.



    @maja:
    Das Problem ist ganz einfach zu l?sen. Du deklarierst und benutzt die Funktionen
    Arbeiter::GetAlter(), Arbeiter::GetLohn() und Arbeiter::GetArbeitsjahre(), aber du hast sie nirgendwo definiert. Arbeiter::SetzeAlter() hast du deklariert und definiert, deswegen wird das vom Linker auch nicht moniert.

    p.s.: Ich finde Frauen, die programmieren einfach nur sexy... hrhr
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!