Anfänger: Wie schreibe ich eine Initialisierung für eine struct...
-
...die einen eingegebenen char Wert (Vorname und Nchname) einen leeren String zuweist.
struct eintraege{
char Vorname[50];
char Nachname[50];
char Strasse[50];
};
eintraege Adressen[100];Würde mich freuen wenn da jemand ne Idee hat.
MFG
der blonde Mr.Blond
-
Hi,
Strukturen können einen Konstruktor haben.
struct eintraege{ char Vorname[50]; char Nachname[50]; char Strasse[50]; // constructor eintraege() { memset(this, 0, sizeof(*this)); } };
-
..Habe mich vielleicht falsch ausgedrückt.
Ich möchte die Werte (Adressen die ich in dem Feld Telefonbuch speichere) beim Aufruf so initialisieren das den Namen ein leerer String zugewiesen wird.Vielleicht hast du dazu ne Idee?
Danke schon mal.
-
Genau das passiert hier doch, aber es geht auch anderst
struct eintraege{ char Vorname[50]; char Nachname[50]; char Strasse[50]; // constructor eintraege() : Vorname (""), Nachname (""), Strasse ("") {} };
-
In der Funktion void eingabe(eintraege Telefonbuch)...
bekomme ich beim übersetzen in der der Zeile:cin>>Telefonbuch.Telefonnummer[a];
einen Fehler angezeigt. fehler lautet: E2062 Unzulässiger Indirektionsoperator.
Das ganze Programmm sieht bisher so aus:
#include <iostream.h>
struct eintraege{
char Vorname[50];
char Nachname[50];
int Telefonnummer;};
eintraege Telefonbuch[100];//Funktion fuer Initialisierung
//eintraege initialisiere(char Vorname, char Nachname, int Telefonnummer){
// Telefonbuch.Vorname= Vorname + cout << " ";
// Telefonbuch.Nachname= Nachname + cout<< " ";
// Telefonbuch.Telefonnummer= Telefonnummer;
// return(Telefonbuch);
//}void eingabe (eintraege Telefonbuch){
static int a;
cout<<"Bitte geben Sie den Vornamen ein: ";
cin>>Telefonbuch.Vorname[a];
cout<<"Bitte geben Sie den Nachnamen ein: ";
cin>>Telefonbuch.Nachname[a];
cout<<"Bitte geben Sie die Telefonnummer ein: ";
cin>>Telefonbuch.Telefonnummer[a];
a++;
}void Nummereingabe (eintraege Telefonbuch)
void loeschen (eintraege Telefonbuch)
void anzeigen (eintraege Telefonbuch)
void main(){
char Auswahl;
cout <<"Telefonbuch" <<endl;
cout <<"neuer Eintrag: a" <<endl;
cout <<"Suche nach Eintragnummer: b" <<endl;
cout <<"Eintrag loeschen: c" <<endl;
cout <<"Eintrag anzeigen: d" <<endl;
cin >> Auswahl;
switch(Auswahl){
case 'a':
cout <<eingabe()<<endl;
break;
case 'b':
cout<<Nummereingabe()<<endl;
break;
case 'c':
cout << loeschen()<<endl;
break;
case 'd':
cout << anzeigen()<<endl;
break;
default:
cout<< "Bitte treffen Sie eine Auswahl die das Menue ermoeglicht" <<endl;
}
char p[50]
cin.getline(p,50);
cin.getline(p,50);
}Vielleicht kannst du mir auch dabei weiterhelfen. Scheinst ja Ahnung zu haben.
-
cin>>Telefonbuch.Telefonnummer[a];
==>
cin>>Telefonbuch[a].Telefonnummer;
mfg JJ
-
[C++ Fehler] Unit1.cpp(30): E2094 'operator+' ist im Typ 'eintraege' für Argumente des Typs 'int' nicht implementiert
:-((
-
Und was ist 'Unit1.cpp(30)'? Meine Kristallkugel ist immer noch in der Reparatur.
Oder hast du vielleicht hier die Kommentartoken wieder entfernt?//Funktion fuer Initialisierung //eintraege initialisiere(char Vorname, char Nachname, int Telefonnummer){ // Telefonbuch.Vorname= Vorname + cout << " "; // Telefonbuch.Nachname= Nachname + cout<< " "; // Telefonbuch.Telefonnummer= Telefonnummer; // return(Telefonbuch); //}
-
Hi,
dein Programm enthält einige Fehler...
Anstatt mit einem Array von fester größe zu hantieren, würde ich lieber
einen Vektor verwenden.
Zudem übergibst Du das globale Array 'by value'. Das bedeutet, das es jedesmal
auf dem Stack kopiert wird.Mit einen Vektor könnte es folgendermaßen aussehen:
#include <iostream> #include <vector> struct eintraege{ char Vorname[50]; char Nachname[50]; int Telefonnummer; eintraege() { memset(this, 0, sizeof(*this)); } // werte initialisieren }; typedef std::vector< eintraege > Telefonbuch; // vector definieren void eingabe(Telefonbuch* telefonbuch) // telefonbuch übergabe 'by descriptor' { eintraege Eintrag; // tempräres eingabe objekt cout << "Bitte geben Sie den Vornamen ein: "; cin >> Eintrag.Vorname; cout << "Bitte geben Sie den Nachnamen ein: "; cin >> Eintrag.Nachname; cout << "Bitte geben Sie die Telefonnummer ein: "; cin >> Eintrag.Telefonnummer; telefonbuch->push_back(Eintrag); // temporäres object in vektor kopieren } void ausgabe(const Telefonbuch& telefonbuch) // übergabe 'by reference' { // alle Einträge ausgeben for (size_t i = 0; i < telefonbuch.size(); ++i) { cout << "-----------------------------------------------" << endl; cout << "Vorname: " << telefonbuch[i].Vorname << endl; cout << "Nachname: " << telefonbuch[i].Nachname << endl; cout << "Telefonnummer: " << telefonbuch[i].Telefonnummer << endl; cout << "-----------------------------------------------" << endl; } } int main(int argc, char* argv[]) { Telefonbuch MeinTelefonbuch; // lokaler vektor für einträge char Auswahl; cout <<"Telefonbuch" <<endl; cout <<"neuer Eintrag: a" <<endl; cout <<"Suche nach Eintragnummer: b" <<endl; cout <<"Eintrag loeschen: c" <<endl; cout <<"Eintrag anzeigen: d" <<endl; cin >> Auswahl; switch(Auswahl){ case 'a': eingabe(&MeinTelefonbuch); // adresse des vektors übergeben break; case 'b': break; case 'c': break; case 'd': break; default: cout << "Bitte treffen Sie eine Auswahl die das Menue ermoeglicht" << endl; break; } ausgabe(MeinTelefonbuch); // vektors als Referenz übergeben char p[50]; cin.getline(p,50); cin.getline(p,50); return 0; }
Den rest solltest du selber schaffen, wenn du den Code verstanden hast.
Gruss
EDIT: zur Demonstration habe ich die Übergabe an die Funktion 'ausgabe' als
Referenz abgeändert, da diese den Vektor nur ausgibt und nicht verändert.
-
Hi Mr.Blond,
bevor ich Alternativen anführe erstmal zu deinen Fehlern.
1.) Du definierst alle deine Funktionen mit jeweils einem Parameter. Beim
Aufruf gibst jedoch keinen Parameter an. (COMPILER-FEHLER)
2.) Du verwendest asl Parameter "eintraege Telefonbuch" vermutlich mit der
Absicht dein gesamtes Telefonbuch als Parameter zu übergeben. Das klappt
so nicht, auf deine Art übergibst du lediglich den ersten Eintrag als
Parameter. (VERSTÄNDNIS-FEHLER)
3.) Selbst dieser Parameter nutz dir nur wenig da du ihn "by Value" übergibst
und er daher nicht (permanent) geändert werden kann. (VERSTÄNDNIS-FEHLER)
4.) Wenn, nach all den Korrekturen, deine Funktionen mal funktionieren solltest
du mal über den Sinn von deinen lokalen static Variablen nachdenken.
(VERSTÄNDNIS-FEHLER)
5.) Globale Parameter sind zu vermeiden solange es nicht unbedingt notwendig
ist. Was bei dir nicht der Fall ist.Wie's besser geht siehst du bei EarlyBird. Ich bezweifle jedoch das du seine
Lösung nachvollziehen kannst. Daher empfehle ich dringend ein Tutorial oder
ein Anfängerbuch, sonst wird das nix.mfg JJ