Expected primary expression before a & token



  • Muss aber nur r statt &r sein, die Funktion erwartet ja auch eine Referenz.



  • Eisflamme schrieb:

    Wenn man in C++ Funktionen aufruft, muss man legiglich den Namen der Variablen angeben, nicht den Typ.

    Sprich, lass Date& aus Zeile 40 weg.

    Schon versucht, der Fehler bleibt leider bestehen.

    Eisflamme schrieb:

    Mir ist aber die Funktionsweise deiner Date-Klasse nicht ganz klar. Wieso musst Du isDate(...) nochmal ein Date übergeben? Das, was du übergibst, ist doch die aufgerufene Instanz, diese ist in der Funktion also bereits bekannt.

    Kann sein dass ich hier fehlerhaft programmiere, aber ich bin erst seit etwa einem Monat mit C++ vertraut und mir erschien es so richtig zu sein.

    Eisflamme schrieb:

    Außerdem ist es besser, gar nicht erst zuzulassen, dass Date-Objekte mit fehlerhafter Semantik bestehen. Besser direkt bei der Eingabe prüfen. Und wenn Du ein Datum auf Validität testen möchtest, kannst Du dafür eine unabhängige Prüfmethode basteln, die dann aber natürlich die Bestandteile des Datums und kein Date-Objekt selbst erhalten sollte.

    Ich gebe zu der Code ist leider etwas unübersichtlich, das liegt aber daran, dass das Programm mehrfach in unterschiedlichen Versionen als Übungsaufgabe vorkam, zunächst als reines Anfängerprogramm nur mit Standardtypen zum Abspeichern der Werte, dann mit einer Date-Struktur und jetzt schließlich mit Date-Klasse. Da es sich nur um ein Übungsprogramm handelt, dass eigentlich niemals jemand anders ausser mir lesen müssen sollte, habe ich nicht besonders gut 'aufgeräumt'.
    Die Eingabe von Daten erfolgt durch get_date, wobei get_date so oft durchlaufen wird, bis is_date das Datum als richtig absegnet, es wird also direkt bei der Eingabe geprüft.

    Eisflamme schrieb:

    Muss aber nur r statt &r sein, die Funktion erwartet ja auch eine Referenz.

    Hat das Problem gelöst, danke auf jeden Fall schonmal, wäre aber nett, wenn es ich noch eine knappe Erläuterung bekommen könnte, damit mir das nicht nochmal passiert.



  • Es heißt Rhythmus, nicht Rythmus oder Rytmus.
    Wenn ich ein Programm sehe, das in der zweiten Ausgabe schon so einen Bock schießt, dann habe ich auch kein Vertrauen mehr in dessen weiteren Berechnungen.



  • Vicious Falcon schrieb:

    Es heißt Rhythmus, nicht Rythmus oder Rytmus.
    Wenn ich ein Programm sehe, das in der zweiten Ausgabe schon so einen Bock schießt, dann habe ich auch kein Vertrauen mehr in dessen weiteren Berechnungen.

    '...in dessen weitere Berechnungen.' Müsste es hier heissen.
    Wenn eine Aussage so unqualifizierte Rechtschreibfehler aufweist, vertraue ich dem Autor irgendwie nicht mehr...



  • Eyeseeyou schrieb:

    Vicious Falcon schrieb:

    Es heißt Rhythmus, nicht Rythmus oder Rytmus.
    Wenn ich ein Programm sehe, das in der zweiten Ausgabe schon so einen Bock schießt, dann habe ich auch kein Vertrauen mehr in dessen weiteren Berechnungen.

    '...in dessen weitere Berechnungen.' Müsste es hier heissen.
    Wenn eine Aussage so unqualifizierte Rechtschreibfehler aufweist, vertraue ich dem Autor irgendwie nicht mehr...

    😃 👍



  • Eyeseeyou schrieb:

    Eisflamme schrieb:

    Wenn man in C++ Funktionen aufruft, muss man legiglich den Namen der Variablen angeben, nicht den Typ.

    Sprich, lass Date& aus Zeile 40 weg.

    Schon versucht, der Fehler bleibt leider bestehen.

    Das kann eigentlich nicht sein. Wenn du Eisflammes Rat befolgst, eliminierst du damit einen Compiler-Fehler. Somit musst du eine Fehlermeldung weniger sehen. Wenn dem nicht so ist, hast du irgendwas falsch gemacht. Also:

    Statt Date& r übergibst du nur r . Klappt?

    Abgesehen davon habe die anderen Recht, diese Referenz ist absolut unnötig und sollte lieber ganz weggelassen werden.



  • _matze schrieb:

    Statt Date& r übergibst du nur r . Klappt?

    Jo klappt, hatte mich zunächst verlesen und nur Date weggelassen, was noch nicht ausgereicht hat, jetzt ist wie verlangt nur noch ein r in der Übergabe und schon läufts.
    Nur ist mir wie gesagt noch nicht endgültig klar, was an der Stelle nun falsch war 😞



  • Eyeseeyou schrieb:

    _matze schrieb:

    Statt Date& r übergibst du nur r . Klappt?

    Jo klappt, hatte mich zunächst verlesen und nur Date weggelassen, was noch nicht ausgereicht hat, jetzt ist wie verlangt nur noch ein r in der Übergabe und schon läufts.
    Nur ist mir wie gesagt noch nicht endgültig klar, was an der Stelle nun falsch war 😞

    Ganz einfach: du musst bei der Übergabe von Variablen an eine Funktion/Methode nur den Bezeichner der Variable angeben, nicht noch zusätzlich den Typ (der Typ ist in dem Fall Date&, also eine Referenz vom Typ Date). Anders ist es bei der Deklaration/Definition der Funktion, hier musst du natürlich auch den Typ angeben (bei der Deklaration reicht sogar der Typ). Beispiel:

    //Deklaration (Bekanntmachung) der Funktion bzw. Funktionsprototyp
    void myFunc(int);  //hier ist sogar nur der Typ nötig, ich mache es aber nie so und finde es lesbarer, auch hier den Variablenbezeichner zu notieren
    
    //Definition der Funktion
    void myFunc(int par1) {  //hier müssen selbstverständlich Typ und Bezeichner notiert werden
      //mach irgendwas...
    }
    
    //Aufruf, irgendwo im Code
    
    int i=123;
    myFunc(i);  //Aufruf hier nur mit dem Variablennamen, eine Typangabe ist nicht nötig und nicht erlaubt
    


  • Vicious Falcon schrieb:

    Es heißt Rhythmus, nicht Rythmus oder Rytmus.
    Wenn ich ein Programm sehe, das in der zweiten Ausgabe schon so einen Bock schießt, dann habe ich auch kein Vertrauen mehr in dessen weiteren Berechnungen.

    Das Programm berechnet Biorhythmen. Wer solchem Blödsinn Glauben schenkt, den schrecken auch Rechtschreibfehler in der Ausgabe nicht ab.



  • Danke _matze für die Erklärung 😃

    Und was der Buchautor sich für seine Übungsprogramme überlegt ist doch egal, und wenn er mich die DNS-Stränge meiner Nachfahren berechnen ließe, wäre es mir auch recht, also regt euch doch nicht alle über die Biorhythmen auf 😉



  • Eyeseeyou:
    Ich weiß ja nicht, wo du die Übung her hast. Tutorial, Buch? Ein Buch ist sehr empfehlenswert. Tutorials auch, wenn sie gut sind, aber ich kenne gerade keine.

    Jedenfalls solltest Du versuchen bei Klassen objektorientierter zu denken. Eine Instanz der Klasse Date ist ein Datum. Da kannst Du direkt logisch ein paar Dinge erschließen:
    -> Methoden auf eine Instanz betreffen auch dieses Datum
    -> Methoden auf eine Instanz, welche ein Datum zusätzlich als Argument haben, arbeiten mit zwei Daten (die aufgerufene Instanz sowie die übergebene Instanz)
    -> Wenn dieses Date-Objekt ein Datum darstellt, dann sollte das natürlich auch konsistent sein, d.h. ein gültiges Datum sein; andernfalls stellt Date ja nicht wirklich ein Datumsobjekt dar sondern Käsekuchen
    usw.

    Das hat nicht unbedingt mit aufgeräumt zu tun, das sind m.E. Logik/Verständnisfehler, darum besser ein gutes Tutorial oder Buch als das, was du gerade nutzt.


Anmelden zum Antworten