Anfänger bruacht Hilfe: Array Werte werden vermutlich nicht übergeben und angezeigt
-
Endlich mal eine echte Fehlermeldung

Hast du den Member Startnummer vielleicht private gesetzt? Wenn ja, kommst du du von außen nicht an den Wert dran, es sei denn, du spendierst der Klasse eine passende Getter-Methode.
-
Hier mal die Laeufer.h
Das stimmt Startnummer ist in protect. Protect brauche ich dann noch wegen einer Vererebung aber das ist noch Zukunft.
#include <iostream> #include <string> using namespace std; class LAEUFER //Klasse der Laeufer anlegen { protected: int Startnummer; //private Attribute setzen std::string Vorname; std::string Nachname; std::string Geschlecht; float Laufzeit; char Hobbyklasse; int Startgebuehr; public: LAEUFER(); //Konstruktor definieren ~LAEUFER(); //Destruktor definieren //Definition der Methoden void Teilnehmer_anlegen(int s_Startnummer, std::string s_Vorname, std::string s_Nachname, std::string s_Geschlecht, char s_Hobbyklasse, float Laufzeit); void Teilnehmer_anzeigen(); float Laufzeit_eingeben(float s_Laufzeit); void Ergebnis_anzeigen(); void Startgebuehr_berechnen(); };
-
[C++ Warning] main.cpp(78): W8060 Possibly incorrect assignment
Stratnummer steht jetzt mal in public.
Da kann ich das Programm dann wieder starten.
Laeufer eingeben. Aber bei der Ausgabe Leauft er alle 500 durch und zeigt auch die inhalbe der String Variablen nicht an.Muss an dem
cout <<"Wollen Sie einen weiteren Teilnehmer eingeben? [J/N]: "; cin >> Menue; cout <<endl; if (Menue == 'J' || Menue == 'j') { i = i++; } else { if (Menue == 'N' || Menue == 'n') { break;Muss an dem
i = i++liegen
-
"protected vs. private" ist für das Hauptprogramm irrelevant - wichtig ist hier, daß die Member nicht 'public' sind, du aus dem Hauptprogramm heraus also nicht darauf zugreifen kannst. Wenn das Hauptprogramm irgendeinen dieser Werte wissen muß, braucht deine Klasse eine entsprechende Zugriffsmethode:
class LAEUFER { ... public: ... int get_Startnummer() {return Startnummer;} ... }; ...//im Hauptprogramm if(a_Laeufer[i].get_Startnummer == -1) ...PS: Nur eine Kleinigkeit, aber vermutlich kommst du mit einem vector<LAEUFER> besser weg als mit deinem Array

-
Jetzt kommt folgende Fehlemeldung:
[C++ Error] LAEUFER.H(18): E2451 Undefined symbol 'Startnummer'
im Main
-
tw14199 schrieb:
[C++ Warning] main.cpp(78): W8060 Possibly incorrect assignment
Ja, = ist eine Zuweisung, Vergleich ist ==

Stratnummer steht jetzt mal in public.
Da kann ich das Programm dann wieder starten.
Laeufer eingeben. Aber bei der Ausgabe Leauft er alle 500 durch und zeigt auch die inhalbe der String Variablen nicht an.Wie ich oben schon sagte, solltest du im Konstruktor der Läuferklasse den Wert auch initialisieren.
Muss an dem
i = i++liegen
Ganz sicher - daß diese Anweisung unsinnig ist, habe ich weiter oben schon erläutert.
tw14199 schrieb:
Jetzt kommt folgende Fehlemeldung:
[C++ Error] LAEUFER.H(18): E2451 Undefined symbol 'Startnummer'
im MainDie Zugriffsmethode benötigst du nicht anstelle der Membervariable, sondern zusätzlich.
-
Hallo
Versuche die Probleme schon selber zu lösen, das fuktioniert heute einfach nicht so. Muss auch sagen das ich ein bisl überfordert bin. Denn egal was ich ädere, es kommen immer neue Fehlermeldungen.Fehlermeldung: [C++ Error] main.cpp(78): E2235 Member function must be called or its address taken
Habe jetzt die Methode in der Laeufer.h und die Implementierung der Methode in der Laeufer.cpp
int LAEUFER::get_Startnummer() { return Startnummer; }Danke für die Mühe.
-
Zeig mal, wie Startnummer und get_Startnummer in Laeufer.h aussehen.
-
#include <iostream> #include <string> using namespace std; class LAEUFER //Klasse der Laeufer anlegen { protected: int Startnummer; std::string Vorname; //private Attribute setzen std::string Nachname; std::string Geschlecht; float Laufzeit; char Hobbyklasse; int Startgebuehr; public: LAEUFER(); //Konstruktor definieren ~LAEUFER(); //Destruktor definieren //Definition der Methoden void Teilnehmer_anlegen(int s_Startnummer, std::string s_Vorname, std::string s_Nachname, std::string s_Geschlecht, char s_Hobbyklasse, float Laufzeit); void Teilnehmer_anzeigen(); float Laufzeit_eingeben(float s_Laufzeit); void Ergebnis_anzeigen(); void Startgebuehr_berechnen(); int get_Startnummer(); };
-
#include "Laeufer.h" LAEUFER::LAEUFER() //Implementierung des Konstruktors { Laufzeit = 0; } LAEUFER::~LAEUFER() //Implementierung des Destruktors { } //Implementierung der Methode Teilnehmer_anlgen void LAEUFER::Teilnehmer_anlegen(int s_Startnummer, std::string s_Vorname, std::string s_Nachname, std::string s_Geschlecht, char s_Hobbyklasse, float s_Laufzeit) { Startnummer = s_Startnummer; Vorname = s_Vorname; Nachname = s_Nachname; Geschlecht = s_Geschlecht; Hobbyklasse = s_Hobbyklasse; Laufzeit = s_Laufzeit; } void LAEUFER::Teilnehmer_anzeigen() //Implementierung der Methode Teilnehmer_anzeigen { cout << "Teilnhemer des Crosslaufes in diesem Jahr: \n"<<endl; cout << "Startnummer: " << Startnummer << endl; cout << "Geschlecht: " << Geschlecht << endl; cout << "Vorname: " << Vorname << endl; cout << "Nachnem: " << Nachname << endl, cout << "Hobbyklasse: " << Hobbyklasse << endl; } //Implementierung der Methode Laufzeit_eingeben float LAEUFER::Laufzeit_eingeben(float s_Laufzeit) { Laufzeit = s_Laufzeit; return 1; } void LAEUFER::Ergebnis_anzeigen() //Implementierung der Methode Ergebniss_anzeigen { } void LAEUFER::Startgebuehr_berechnen() //Implementierung sowie berechnung der Startgebuehr { if (Hobbyklasse == 'J' || Hobbyklasse == 'j') { Startgebuehr = 8; } else { Startgebuehr = 10; } } int LAEUFER::get_Startnummer() { return Startnummer; }
-
Und wie benutzt du das in main.cpp, Zeile 78?
-
Fehlen mir die Eingabeparameter in der Methode?
int LAEUFER::get_Startnummer(int s_Startnummer) { Startnummer = s_Startnummer; return Startnummer;}
-
tw14199 schrieb:
Fehlen mir die Eingabeparameter in der Methode?
Nein, das ist so schon in Ordnung. Ich vermute eher, dass beim Funktionsaufruf die Klammern fehlen.
-
case 'b': for(i = 0; i <500;i++) { if(a_Laeufer[i].get_Startnummer == -1) { a_Laeufer[i].Teilnehmer_anzeigen(); } else { break; }}
-
Hallo
[cpp]get_Startnummer**()**;[/cpp]
chrische
-
MFK schrieb:
Ich vermute eher, dass beim Funktionsaufruf die Klammern fehlen.
Du musst übrigens immer noch, wie von CStoll schon mehrfach erwähnt, im Konstruktor Startnummer mit -1 initialisieren, damit das funktioniert.
-
Ich schließe mich mal der Frage an:
MFK schrieb:
Und wie benutzt du das in main.cpp, Zeile 78?
PS: Nein, du brauchst keine Parameter für die get_() Methode. Und das, was du im letzten Beitrag geschrieben hast, wäre eine set_() Methode (die dir aber gar nichts nützt, weil sie die bisher eingetragene Startnummer einfach überschreibt.
PPS: Und damit der Vergleich "Startnummer==-1" (in welcher Abwandlung auch immer) etwas ergeben kann, mußt du die Startnummer im Konstruktor mit -1 initialisieren - aber das habe ich auch schon dreimal gesagt.
-
sorry, habe ich schon gelesen, aber das am Anfang bisl viel für mich. Ich habe mit Mühe und Not das soweit gebracht. Bin eben noch ein Neugling, Anfänger ohne Erfahrung.
-
public: LAEUFER(int Stratnummer =-1); //Konstruktor definieren ~LAEUFER(); //Destruktor definierenSie das dann so aus?
Danke
-
Nein - so:
... LAEUFER(); //Ctor ~LAEUFER();//Dtor ... //Läufer.cpp: LAEUFER::LAEUFER() { Laufzeit = 0; //Wozu du das brauchst, ist mir schleierhaft, aber ich lasse es mal stehen Startnummer = -1;// <- initialisiert die Startnummer mit einem Dummy-Wert } ...(Ich könnte jetzt anfangen mit Initialisierungslisten, aber darauf verzichte ich lieber ;))