char array in klassen
-
hallo!
ich fange gerade an klassen zu lernen und hab hier mal versucht ein programm zu schreiben. das problem ist, dass ich zwar jan.falter initialisieren und wieder ausgeben kann, aber nicht jan.fname(wie unten im code)
.
kann mir das jemand erklären?# include <iostream>
using namespace std;
class freund
{
public:
char fname[15];
int falter;
char sport[15];
};int main()
{
freund jan;jan.fname="jan";
cout <<jan.fname;
return 0;
}ich weiß natürlich, dass das objekt der klasse schon jan heißt und der name eigentlich unnötig wäre, aber es ist ja nur zum probieren...
Danke für jede Hilfe!

gruß firestorm
-
Du kannst dem char array auf diese Weise nichts zuweisen.
Was gehen würde, wäre:
fname[0] = 'j'; fname[1] = 'a'; fname[2] = 'n'; fname[3] = '\0'; // Terminierung nicht vergessenAber weil dass so unschön und fehleranfällig ist, nimmt man für C-Strings Funktionen: http://www.cppreference.com/stdstring/index.html
Und weil wir im C++ Forum sind, nehmen wir keine C-Strings, sondern richtige Strings: http://www.cppreference.com/cppstring/index.html
-
und was für ein befehl davon eigent sich dafür?
ich schreib da am montag eine
klausur
drüber und bin ziemlich im stress
. da habe ich nicht so viel zeit mich in die komplette materie einzuarbeiten...sonst würde ich mich in so einem fall auch nicht unbedingt gleich ans forum wenden 
-
#define MAXSTRING 10 class freund { public: void setName(char* name) { strncpy(fname, name, MAXSTRING); fname[MAXSTRING-1] = '\0'; // um sicher zu gehen, dass der String terminiert ist } char *getName() { return fname; } private: char fname[MAXSTRING]; char sport[MAXSTRING]; int falter; }; int main() { freund jan; jan.setName("Ballack"); cout <<jan.getName(); return 0; }Aber wie du siehst, muss man bei CStrings immer darauf aufpassen, dass der Speicher ausreicht und die Strings nullterminiert sind.
(Kommentiere mal die Zeile fname[MAXSTRING-1] = '\0'; aus, und gib einen Namen ein, der aus mehr Zeichen besteht als MAXSTRING - dann siehst du was ich meine)