Hilfe!!! finde Fehler nicht



  • Bei beiden AUSGABE2 in QUADER_AUSGABE machst du zwei Klammern auf, aber nur eine zu.



  • habe die eine { gelöscht und bei QUADER_AUSGABE die Klammern zu gemacht ... Fehlermeldungen kommen aber immer noch 😞 😞 😞 😕



  • mach dir mal gedanken der ganze summs aufgelösst wird

    AUSGABE1("Angenommen, ein Quader besitzt folgende Ausmasse:");
    // aus dieser zeile wird
    { cout << "Angenommen, ein Quader besitzt folgende Ausmasse:" << endl };
    

    da meckert mein compiler auch 😃



  • mein compiler bleibt schon immer bei

    int main()
    //...
    QUADER_DIALOG(a,b,c)
    

    hängen weiß aber nicht was er da zu meckern hat



  • c++ Neuling schrieb:

    habe hier ein Prog mit vielen Makros (war Pflicht) nun hat sich aber ein (oder mehrer) Syntaxfehler trunter gemischt die ich nicht wegbekomme.....bitte um Hilfe

    Dann hau mal deinen Lehrer! Makros sollte man generell vermeiden. Hättest du statt Makros Funktionen genommen, hättest du wahrscheinlich viel genauere Fehlermeldungen vom Compiler bekommen und hättest jetzt nicht diesen Stress... 🙄



  • Hinter jede Anweisung gehört ein Semikolon, deshalb solltest du sämtliche Makros nochmal überarbeiten.



  • @godlikebot woher soll man das denn wissen, wenn man es nie ausprobiert hat? is doch wohl ne wichige übung für ne wichtige erkenntnis, wie soll mans sonst lernen, außer am eigenen leib. unterricht, wo immer alles vorgesetzt wird ("makros sind schlecht, also lernen wir das erst gar nicht"), erscheint mir äußerst fragwürdig.

    also, lehrer doch nicht hauen 😉



  • mata schrieb:

    @godlikebot woher soll man das denn wissen, wenn man es nie ausprobiert hat? is doch wohl ne wichige übung für ne wichtige erkenntnis, wie soll mans sonst lernen, außer am eigenen leib. unterricht, wo immer alles vorgesetzt wird ("makros sind schlecht, also lernen wir das erst gar nicht"), erscheint mir äußerst fragwürdig.

    Die Frage ist, ob es dafür nötig ist ein vergleichsweise grosses Programm zu schreiben. Imho hätte man das auch an einem kleinen Beispiel erklären können und die gesparte Zeit interessanteren Themen gewidmet. Naja, Hauptsache der Lehrer klärt das auf (und ist nicht wirklich der Meinung, dass diese Art von Programmierung einem die Arbeit erleichtert).

    mata schrieb:

    also, lehrer doch nicht hauen 😉

    Naja, vielleicht ein bisschen Schubsen... oder ihm einen "Tritt mich"-Schild auf den Rücken kleben... oder... 🤡



  • habe den Quellcode jetzt fast fehlerfrei bekommen nur noch eins nicht, den Makro AUSGABE2 wenn ich diesen ausklammere kommt keine Fehlermeldung mehr

    #include <iostream> 
    #include <cstdlib>
    using namespace std; 
    
    #define EINGABE(TEXT,VARIABLE) \
        { \
            cout << TEXT; \
            cin >> VARIABLE; \
        }
    
    #define AUSGABE2(TEXT,VARIABLE) {cout << TEXT << VARIABLE << endl;}
    
    #define AUSGABE1(TEXT) \
        { \
            cout << TEXT << endl; \
        }    
    
    #define LINIE \
        { \
            cout << "==========" << endl; \
        }    
    
    #define QUADER_VOLUMEN(A,B,C) \
        { \
            { (A) * (B) * (C) \
        }
    
    #define QUADER_OBERFLAECHE(A,B,C) \
        { \
            2 * ((AB) + (AC) + (BC)) \
        }
    
    #define RECHTECK_FLAECHE(L,B) \
        { \
            (L) * (B) \
        } 
    
    #define RECHTECK_UMFANG(L,B) \
        { \
            2 * ((A) + (B) \
        )
    
    #define QUADER_AUSGABE(A,B,C) \
        { \
            AUSGABE2("Das Volumen des Quaders betraegt ",(QUADER_VOLUMEN(A,B,C))); \
            AUSGABE2("Die Oberfläche des Quaders beträgt ",(QUADER_OBERFLAECHE(A,B,C))); \
            LINIE \
        }
    
    #define QUADER_AUSMASSE(A,B,C) \
        { \
            AUSGABE2("Laenge: ",(A)); \
            AUSGABE2("Breite: ",(B)); \
            AUSGABE2("Hoehe: ",(C)) \
        }
    
    #define QUADER_DIALOG(A,B,C) \
        { \
            AUSGABE1("Geben Sie die Ausmasse eines Quaders ein."); \
            EINGABE("Laenge: ",A); \
            EINGABE("Breite: ",B); \
            EINGABE("Hoehe: ",C); \
            QUADER_AUSGABE(A,B,C) \
        }
    
    #define RECHTECK_AUSGABE(L,B) \
    { \
            AUSGABE2("Die Flaeche des Rechtecks betraegt ",(RECHTECK_FLAECHE(L,B))); \
            AUSGABE2("Der Umfang des Rechtecks betraegt ",(RECHTECK_UMFANG(L,B))); \
            LINIE \
        }    
    
    #define RECHTECK_AUSMASSE(L,B) \
        { \
            AUSGABE2("Laenge: ",(L)); \
            AUSGABE2("Breite: ",(B)) \
        }
    
    #define RECHTECK_DIALOG(L,B) \
     { \
            AUSGABE1("Geben Sie die Ausmasse eines Rechtecks ein."); \
            EINGABE("Laenge: ",L); \
            EINGABE("Breite: ",B); \
            RECHTECK_AUSGABE(L,B) \
     }
    
    int main() { 
        double a, b, c; 
        QUADER_DIALOG(a,b,c); 
        AUSGABE1("Angenommen, ein Quader besitzt folgende Ausmasse:"); 
        QUADER_AUSMASSE(a + 1.0,b + 1.0,c + 1.0); 
        QUADER_AUSGABE(a + 1.0,b + 1.0,c + 1.0); 
    
        double laenge, breite; 
        RECHTECK_DIALOG(laenge,breite); 
        AUSGABE1("Angenommen, ein Rechteck besitzt folgende Ausmasse:"); 
        RECHTECK_AUSMASSE(laenge + 0.5,breite + 0.5); 
        RECHTECK_AUSGABE(laenge + 0.5,breite + 0.5); 
        system("pause");
        return 0; 
    }
    

    Fehler bezieht sich auf VARIABLE

    Was ist nur falsch 😕 😕 😕



  • Wirf mal die ganzen geschweiften Klammern raus. Was sollen die da überhaupt?



  • C++ Neuling schrieb:

    habe den Quellcode jetzt fast fehlerfrei bekommen

    Das glaub ich dir nicht. Ich sehe immer noch jede Menge Fehler.
    Was soll zB die Klammerung bei solchen Makros

    #define QUADER_OBERFLAECHE(A,B,C) \
        { \
            2 * ((AB) + (AC) + (BC)) \
        }
    

    ? Das kann bei einer Verkettung von Ausdrücken nicht funktionieren. Zudem verwendest du hier Bezeichner, die gar keine Parameter von QUADER_OBERFLAECHE sind.
    Oder QUADER_VOLUMEN hat zB keine übereinstimmende Anzahl von öffnenden und schliessenden Klammern.
    ) ist nicht dasselbe wie } ➡ RECHTECK_UMFANG
    usw.usf - ich denke du siehst langsam, warum Makros andere Einsatzgebiete haben



  • so ist es richtig....

    #include <iostream> 
    #include <cstdlib>
    using namespace std; 
    
    #define EINGABE(TEXT,VARIABLE) \
            cout << TEXT; \
            cin >> VARIABLE; \
    
    #define AUSGABE2(TEXT,VARIABLE) \
            cout << TEXT << VARIABLE << endl;
    
    #define AUSGABE1(TEXT) \
            cout << TEXT << endl;
    
    #define LINIE \
            cout << "==========" << endl;
    
    #define QUADER_VOLUMEN(A,B,C) \
            (A) * (B) * (C)
    
    #define QUADER_OBERFLAECHE(A,B,C) \
            2 * ((A)*(B) + (A)*(C) + (B)*(C))
    
    #define RECHTECK_FLAECHE(L,B) \
            (L) * (B)
    
    #define RECHTECK_UMFANG(L,B) \
            2 * ((L) + (B))
    
    #define QUADER_AUSGABE(A,B,C) \
            AUSGABE2("Das Volumen des Quaders betraegt ",QUADER_VOLUMEN(A,B,C)); \
            AUSGABE2("Die Oberfläche des Quaders beträgt ",QUADER_OBERFLAECHE(A,B,C)); \
            LINIE
    
    #define QUADER_AUSMASSE(A,B,C) \
            AUSGABE2("Laenge: ",A); \
            AUSGABE2("Breite: ",B); \
            AUSGABE2("Hoehe: ",C)
    
    #define QUADER_DIALOG(A,B,C) \
            AUSGABE1("Geben Sie die Ausmasse eines Quaders ein."); \
            EINGABE("Laenge: ",A); \
            EINGABE("Breite: ",B); \
            EINGABE("Hoehe: ",C); \
            QUADER_AUSGABE(A,B,C)
    
    #define RECHTECK_AUSGABE(L,B) \
            AUSGABE2("Die Flaeche des Rechtecks betraegt ",RECHTECK_FLAECHE(L,B)); \
            AUSGABE2("Der Umfang des Rechtecks betraegt ",RECHTECK_UMFANG(L,B)); \
            LINIE
    
    #define RECHTECK_AUSMASSE(L,B) \
            AUSGABE2("Laenge: ",L); \
            AUSGABE2("Breite: ",B)
    
    #define RECHTECK_DIALOG(L,B) \
            AUSGABE1("Geben Sie die Ausmasse eines Rechtecks ein."); \
            EINGABE("Laenge: ",L); \
            EINGABE("Breite: ",B); \
            RECHTECK_AUSGABE(L,B)
    
    int main() { 
        double a, b, c; 
        QUADER_DIALOG(a,b,c); 
        AUSGABE1("Angenommen, ein Quader besitzt folgende Ausmasse:"); 
        QUADER_AUSMASSE(a + 1.0,b + 1.0,c + 1.0); 
        QUADER_AUSGABE(a + 1.0,b + 1.0,c + 1.0); 
    
        double laenge, breite; 
        RECHTECK_DIALOG(laenge,breite); 
        AUSGABE1("Angenommen, ein Rechteck besitzt folgende Ausmasse:"); 
        RECHTECK_AUSMASSE(laenge + 0.5,breite + 0.5); 
        RECHTECK_AUSGABE(laenge + 0.5,breite + 0.5); 
        system("pause");
        return 0; 
    }
    


  • jetzt möchte ich noch die Berechnungsformel in den Makros frei von Seiteneffekten machen wie geht das??? 😕 😕 😕


Anmelden zum Antworten