C++: Problem mit Klassen
lima-city → Forum → Programmiersprachen → C/C++ und D
alt
arbeiter
arbeiterklasse
arbeitsjahr
compiler
dauernd fehler
definiert deswegen
dokument
doofer fehler
einstellung
einzelnen funktionen
fehler
funktion
geld
hauptprogramm
linker fehler
sen
standart
struktur
zugreifen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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. ;) -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage