Erstes C++ Programm |
21.12.2013, 01:55 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Erstes C++ Programm Guten Morgen , ich habe gerade probleme bei einer Aufgabe: Eigenschaften Attribut Beschreibung m_numMatr Sechsstellige Matrikelnummer des Studenten m_firstname Vorname des Studenten m_surname Nachname des Studenten Verhalten Methode Beschreibung CStudent (1) Erzeugt ein neues Studentenobjekt. Wenn die Matrikelnummer nicht im gültigen Bereich liegt und CStudent (2) nicht gleich -1 ist, setzt er das Attribut auf den Wert -1. Erzeugt ein neues Studentenobjekt als Kopie eines bereits vorhandenen Studenten-Objektes. Zeigt die Adresse und die aktuellen Attribut-Werte des Studenten-Objektes auf dem Bildschirm an. Beispiel: CStudent@0012FF10: Muster, Fritz (123456) setName Ändert Namen und Vornamen des Studenten. setNumMatr Ändert die Matrikelnummer. Hinweis: Da die Methode ein Attribut der Klasse verändert, müssen auch bei ihrer Implementierung die Zusicherungen, die für dieses Attribut gelten, beachtet werden. Sollten die Zusicherungen verletzt werden, wird die Matrikelnummer nicht operator << geändert und eine Warnung auf dem Bildschirm angezeigt, die aussagt, wie eine korrekte Matrikelnummer auszusehen hat. Zeigt das Studentenobjekt in der gleichen Form wie print auf dem Bildschirm an. a) Definieren Sie die Klasse CStudent gemäß dem UML-Klassendiagramm in der Datei CStudent.h und implementieren Sie die Methoden der Klasse in der Datei CStudent.cpp. b) Schreiben Sie ein Testprogramm, das die korrekte Funktionsweise der Klasse nachweist. Program-mieren Sie dazu die in der Tabelle angegebenen Testfälle und zeigen Sie den Zustand des jeweiligen Objektes mit der print-Methode an. Dabei wird jede Methode überprüft. Falls es Parameterwerte gibt, die Probleme verursachen könnten, werden mehrere Testfälle definiert: Testfall Beschreibung erwartetes Verhalten 1 Konstruktor-Aufruf mit drei korrekten Parametern (Muster, Fritz, 123456) Objekt wird erzeugt, Attributwerte stimmen mit Parameterwerten überein 2 Konstruktor-Aufruf mit 2 Parametern (Muster, Luise) Objekt wird erzeugt, Attributwerte für Vor- und Nachnamen stimmen mit Parameterwerten überein, Matrikelnummer ist -1 3 Konstruktor-Aufruf mit ungültiger Matrikelnummer (Meyer, Hans, 12) wie Testfall 2 4 Konstruktor-Aufruf ohne Parameter Alle Attributwerte sind mit den Defaultwerten belegt 5 Copy-Konstruktor-Aufruf Objekt wird erzeugt und hat die gleichen Attributwerte wie das Original 6 setName-Aufruf Attributwerte für Vor- und Nachname stimmen mit Parameterwerten überein 7 setNumMatr-Aufruf mit gültiger Matrikelnummer (234567) Die Matrikelnummer ist geändert 8 setNumMatr-Aufruf mit ungültiger Matrikelnummer (12345678) Die Matrikelnummer ist unverändert. 9 Ausgabe des Objektes aus Testfall 3 auf cout mit Operator << Anzeige wie Testfall 3. Ich bin noch gerade im 1 Testfall und habe leider ein paar Fehlermeldungen die ich einfach nicht beseitigen kann. Header File:
Cpp file:
Fehlermeldungen: Description Resource Path Location Type 'out' was not declared in this scope CStudent.h /CStudent line 29 C/C++ Problem Description Resource Path Location Type 's' was not declared in this scope CStudent.h /CStudent line 29 C/C++ Problem Description Resource Path Location Type expected ';' at end of member declaration CStudent.h /CStudent line 24 C/C++ Problem Description Resource Path Location Type expected ';' before 'class' CStudent.h /CStudent line 14 C/C++ Problem Description Resource Path Location Type expected ')' before 'stream' CStudent.h /CStudent line 24 C/C++ Problem Description Resource Path Location Type expected constructor, destructor, or type conversion before '(' token CStudent.cpp /CStudent line 14 C/C++ Problem Description Resource Path Location Type expected primary-expression before '&' token CStudent.h /CStudent line 29 C/C++ Problem Description Resource Path Location Type expected type-specifier before '(' token CStudent.h /CStudent line 24 C/C++ Problem Ich weiss es sind sehr viele Fehler . Aber hoffentlich kann mir jemand helfen. Im Uml Diagramm war die Zusicherung für den konstruktor: numMatr == -1 | 100000 <= nuMatr<= 999999 Für Hilfe wäre ich dankbar. |
|||||||||||||||
|
||||||||||||||||
21.12.2013, 07:56 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Ich weiß nicht, welchen Compiler du verwendest, im Folgenden behebe ich die Fehler des g++:
nach using namespace std fehlt ein ; aber da du ohnehin std:: schreibst, kannst du die Zeile löschen (std::ostream muss ergänzt werden)
weil du public: vergessen hast
hier fehlt using namespace std;, außerdem ist dein Konstruktorkopf falsch CStudent::CStudent(string surname, string firstname, int numMatr) du hast den Datentyp vergessen, außerdem kommen Defaultwerte nur in den Header.
Tippfehler: nuMatr -> numMatr -1 | 100000 macht ein bitweises oder, das logische geht mit || dann hast du da noch eine }, die zu spät zugeht und ein return im Konstruktor, das da nicht stehen darf.
|
|||||||||||||||
21.12.2013, 11:39 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Ich habe leider immer noch Fehlermeldungen . Habe paar in den Griff bekommen aber immer noch probleme. Die Ide ist Eclipse. Description Resource Path Location Type 'out' was not declared in this scope CStudent.h /CStudent line 31 C/C++ Problem 's' was not declared in this scope CStudent.h /CStudent line 31 C/C++ Problem declaration of 'operator<<' as non-function CStudent.h /CStudent line 26 C/C++ Problem declaration of 'operator<<' as non-function CStudent.h /CStudent line 31 C/C++ Problem expected ';' at end of member declaration CStudent.h /CStudent line 26 C/C++ Problem expected ')' before 'stream' CStudent.h /CStudent line 26 C/C++ Problem expected primary-expression before '&' token CStudent.h /CStudent line 31 C/C++ Problem suggest parentheses around '&&' within '||' [-Wparentheses] CStudent.cpp /CStudent line 22 C/C++ Problem Suggested parenthesis around expression '100000 <= numMatr && numMatr <= 999999' CStudent.cpp /CStudent line 22 Code Analysis Problem
Irgendwas scheint auch mit der if Bedingung nicht zu stimmen ? Der Compiler meckert da. Kannst du mir helfen? |
|||||||||||||||
21.12.2013, 12:03 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Ich habe dir einen funktionerenden Header gegeben, es ist bei dir ihn einzubinden:
das out muss ostream heißen die if-Bedingung stimmt so, der Compiler rät nur zur Klammerung (ist aber nicht nötig, da && die höhere Priorität hat). So sollte die Warnung weggehen: if(numMatr == -1 || (100000 <= numMatr && numMatr <= 999999)) Sag mal, du bist doch auch Man23 und Jassy, oder? |
|||||||||||||||
Anzeige | ||||||||||||||||
|
||||||||||||||||
21.12.2013, 18:13 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Hi euler bevor ich weiter mit dem testen in der main funktion beginnen wollte , wollte ich kurz mal nachfragen ob meine implementierungen soweit der Aufgabenstellung entsprechend in Ordnung ist?
P:S Tany alias Jassy |
|||||||||||||||
21.12.2013, 18:29 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Ich wollte ausserdem den 1 Testfall machen ,aber irgendwie funzt es nicht: int main(){ CStudent z1; CStudent z1("Muster", "Fritz", 123456); } Description Resource Path Location Type 'CStudent' was not declared in this scope main.cpp /CStudent line 12 C/C++ Problem expected ';' before 'z1' main.cpp /CStudent line 12 C/C++ Problem expected ';' before 'z1' main.cpp /CStudent line 14 C/C++ Problem Was ist falsch ? Ich verstehe das nicht. |
|||||||||||||||
21.12.2013, 18:40 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Dann muss ich die Aufgabe ja doch lesen Nochmal zum alten Code:
Und was, wenn die Nummer außerhalb des gewünschten Wertebereichs liegt? Dann steht da irgendwas drin.
Hier musst du (bei if...) natürlich den Bereich von orig.m_numMatr prüfen. Mein .cpp soweit:
|
|||||||||||||||
21.12.2013, 19:45 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany alias Jassy | So würde jetzt meine cpp aussehen:
Und was, wenn die Nummer außerhalb des gewünschten Wertebereichs liegt? Da habe ich ja jetzt einfach return false rein geschrieben . Aber der compiler meckert jetzt. Was kann ich denn sonst schreiben ? Woher soll ich das wissen ? Es steht ja nichts in der Aufgabe. Weisst du eigentlich auch warum mein compiler beim testen in der main meckert? Ich dachte das es richtig wäre? |
|||||||||||||||
21.12.2013, 19:50 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Ein Konstruktor hat keinen Rückgabewert, da kannst du kein return false schreiben. mit
Wird als Martikelnummer erst -1 geschrieben und dann - wenn der Wertebereich passt - mit der echten Nummer überschrieben. Wenn die Nummer falsch ist, bleibt die -1 stehen. Was an deiner main falsch ist, kann ich dir erst sagen, wenn ich sie gesehen habe. |
|||||||||||||||
21.12.2013, 20:20 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Ich glaube du hast einer meiner Beiträge übersehen : Hier nochmal:
|
|||||||||||||||
21.12.2013, 20:24 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Tatsächlich Du versuchst zwei Variablen mit dem selben Namen anzulegen, das kann nicht gutgehen.
|
|||||||||||||||
21.12.2013, 20:31 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Wie macht man das sonst ? Kannst du mir das kurz erklären ? |
|||||||||||||||
21.12.2013, 20:45 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl |
|
|||||||||||||||
21.12.2013, 20:53 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | int main(){ int main() { CStudent z1("Muster", "Fritz", 123456); CStudent z2; //Variable anlegen z2 = CStudent(z1); } Mir werden trotzdem fehler angezeigt: Description Resource Path Location Type a function-definition is not allowed here before '{' token main.cpp /CStudent line 15 C/C++ Problem expected '}' at end of input main.cpp /CStudent line 23 C/C++ Problem Aber wieso muss man das überhaupt in einer Variablen ablegen ? Kann man den Konstruktor nicht einfach mit seinem Namen aufrufen oder so? |
|||||||||||||||
21.12.2013, 20:57 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Du bist im Begriff, in der main() eine main() zu definieren. CStudent z1; //legt eine Variable mit Namen z1 an CStudent z1("Muster", "Fritz", 123456); //legt auch eine Variable mit Namen z1 an die beiden können nicht in der gleichen Hierarchieebene existieren. |
|||||||||||||||
21.12.2013, 20:59 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Oh ja das war nur ein versehen : Trotzdem geht es nicht. int main() { CStudent z1("Muster", "Fritz", 123456); CStudent z2; //Variable anlegen z2 = CStudent(z1); } Description Resource Path Location Type 'CStudent' was not declared in this scope main.cpp /CStudent line 16 C/C++ Problem 'z1' was not declared in this scope main.cpp /CStudent line 18 C/C++ Problem 'z2' was not declared in this scope main.cpp /CStudent line 18 C/C++ Problem expected ';' before 'z1' main.cpp /CStudent line 16 C/C++ Problem expected ';' before 'z2' main.cpp /CStudent line 17 C/C++ Problem |
|||||||||||||||
21.12.2013, 21:02 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Also, bei mir geht es.
sicher, dass du den Header eingebunden hast? |
|||||||||||||||
21.12.2013, 21:18 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | #include "CStudent.h" #include <string> #include <iostream> using namespace std; int main() { CStudent z1("Muster", "Fritz", 123456); CStudent z2; //Variable anlegen z2 = CStudent(z1); } Nur noch das jetzt . Man braucht echt viel geduld. Description Resource Path Location Type call of overloaded 'CStudent()' is ambiguous main.cpp /CStudent line 19 C/C++ Problem |
|||||||||||||||
21.12.2013, 21:23 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Ach ja, das hatte ich dir zwar gelöscht, aber vergessen zu erwähnen:
Du hast schon CStudent(std::string surname = "NoName", std::string firstname = "NoName", int numMatr = -1); durch die Defaultwerte ist der andere Konstruktor darin enthalten, du schreibst also zweimal die selbe Funktion. Jetzt weiß der Compiler nicht, welche der beiden er nehmen soll. Das zieht sich wirklich, über Skype oder ähnliches ginge es schneller. |
|||||||||||||||
21.12.2013, 21:30 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Meinst du das ich einen default konstruktor anlegen soll? P:S Hast du irgendwie ICQ oder so ? Oder kannst du dir anlegen ? |
|||||||||||||||
21.12.2013, 21:35 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Du hast den Konstruktor schon, du hast ihn sogar doppelt. Den Teil, den ich im letzten Beitrag zitiert habe, musst du löschen. ICQ: 418863782, schon ewig nicht mehr genutzt |
|||||||||||||||
21.12.2013, 21:38 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | ok . Ich mache mir einen account bei icq und meld mich dann . |
|||||||||||||||
21.12.2013, 22:16 | Auf diesen Beitrag antworten » | |||||||||||||||
Tany | Würde das für den 2testfall so gehen ? #include "CStudent.h" #include <string> #include <iostream> using namespace std; int main() { CStudent z1("Muster", "Fritz", 123456); CStudent z2; //Variable anlegen z2 = CStudent(z1); CStudent z3("Meyer","Hans",12); CStudent z4(z3); } |
|||||||||||||||
21.12.2013, 22:21 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Sieht gut aus. Was ist aus icq geworden? Ich hatte eine Anfrage von ******525, da antwortet aber keiner mehr. |
|||||||||||||||
21.12.2013, 22:24 | Auf diesen Beitrag antworten » | |||||||||||||||
tany | Keine Ahnung die nachrichten scheinen nicht anzukommen. Hast du msn messenger? |
|||||||||||||||
21.12.2013, 22:28 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Download läuft... |
|||||||||||||||
21.12.2013, 22:38 | Auf diesen Beitrag antworten » | |||||||||||||||
tany | Kannst mir dann ja mail nennen. Können bei skype chatten. |
|||||||||||||||
21.12.2013, 22:41 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | Damit auch spätere Leser etwas davon haben, hier das Ergebnis des Chats:
|
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |