Summe geht nicht



  • Der Kompiler sagt mir keinen Fehler, aber kann nicht die Summe ausrechnen. Warum???

    #include <iostream>
    
    int getValue()
    {
            std::cout << "\nWert eingeben: ";
            int i;
            std::cin >> i;
            return i;
    }
    
    void printSum( int sum )
    {
            std::cout << "\nSumme: " << sum << std::endl;
    }
    
    int main()
    {
            int a = getValue();
            int b = getValue(),
    
            printSum( a + b );
            return 0;
    }
    

  • Mod

    Zeile 19, Semikolon statt Komma.

    Mein Compiler gibt zwar auch keinen Fehler (ist ja auch keiner), warnt jedoch an dieser Stelle. Setze Warnoptionen möglichst auf maximale Stufe, behandle Compilerwarnungen wie Fehler.

    Nachtrag: Wenn du dich fragst, warum das kein Fehler ist: Du hast durch das Komma versehentlich eine weitere int-Variable definiert, in der Art von

    int x = 1, y = 2, z = 3;
    

    Die Variable hat hier zwar den gleichen Namen wie eine schon existierende Funktion, aber Namensüberschneidungen sind in C++ erlaubt, solange zwei gleiche Namen nicht auch im gleichen Scope liegen.



    • Falscher Threadtitel. Suche dir einen aussagekraeftigeren.
    • Keine genaue Fehlerbeschreibung
      Loesung: KLICKEN
    • Dein Problem ist sehr komplex. Es duerfte aber einen Schritt nach vorn geben, wenn du deine Warnungen anguckst / aktivierst...
      Edit: Tipp: Schreib nach printSum(...) in der letzten Zeile std::cout << printSum; 🤡 🤡

    Edit: Zu spaet. Kopf -> Tisch



  • Berth schrieb:

    Der Kompiler sagt mir keinen Fehler, aber kann nicht die Summe ausrechnen. Warum???

    int b = getValue(),
    
            printSum( a + b );
    
    }
    

    Komma zum Semikolon!



  • Obwohl deine Frage hier schon beantwortet wurde hätte ich noch eine Frage an dich Berth:
    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?



  • amichian schrieb:

    Obwohl deine Frage hier schon beantwortet wurde hätte ich noch eine Frage an dich Berth:
    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    manche stehen nun einmal auf dieses hässliche krypto zeug.
    🙂



  • amichian schrieb:

    Obwohl deine Frage hier schon beantwortet wurde hätte ich noch eine Frage an dich Berth:
    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    😕 😕

    Was hast du denn (und der nachposter)??
    Was zum Teufel ist das Problem?



  • Ich bin noch ein ziemlicher Anfänger in C++ und hatte hinter der Schreibweise von Berth einen besonderen Sinn vermutet. Ich wollte ihn nicht kritisieren.



  • amichian schrieb:

    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    Es macht keinen Sinn, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Darum macht man es nicht.


  • Mod

    Gugelmoser schrieb:

    amichian schrieb:

    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    Es macht keinen Sinn, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Darum macht man es nicht.

    Warum? Wenn man weiß, dass man keine Konflikte verursacht ist das völlig legitim.



  • SeppJ schrieb:

    Gugelmoser schrieb:

    amichian schrieb:

    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    Es macht keinen Sinn, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Darum macht man es nicht.

    Warum? Wenn man weiß, dass man keine Konflikte verursacht ist das völlig legitim.

    Finde ich nicht. Ein Namensraum ist ja auch nicht dafür da, um Konflikte zu vermeiden. :p



  • Gugelmoser schrieb:

    Finde ich nicht. Ein Namensraum ist ja auch nicht dafür da, um Konflikte zu vermeiden. :p

    Wofür denn, wenn ich fragen darf?



  • BlauesShirt schrieb:

    Gugelmoser schrieb:

    Finde ich nicht. Ein Namensraum ist ja auch nicht dafür da, um Konflikte zu vermeiden. :p

    Wofür denn, wenn ich fragen darf?

    Ordnung.



  • Bullshit.



  • Gugelmoser schrieb:

    SeppJ schrieb:

    Gugelmoser schrieb:

    amichian schrieb:

    Warum hast du in deinem Code nicht die Codezeile "using namespace std;" nicht eingefügt, um das aufwendige Schreiben von "std::" vor jedem cin oder cout zu vermeiden?

    Es macht keinen Sinn, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Darum macht man es nicht.

    Warum? Wenn man weiß, dass man keine Konflikte verursacht ist das völlig legitim.

    Finde ich nicht. Ein Namensraum ist ja auch nicht dafür da, um Konflikte zu vermeiden. :p

    So ein Quatsch.
    Namensräume kann man in Cpp-Dateien grundsätzlich ausschütten. Sollte es zum Konflikt kommen, was nicht oft der Fall ist, geht man den umständlichen Weg.



  • Kommt drauf an.

    Ich habe beispielsweise im namespace geometry eine Linienklasse und im namespace raster . Damit an der Deklaration von Variablen gleich sichtbar wird, um welche der beiden es sich handel, oeffene ich diesen Namensraum nicht, auch wenn nur eine Lienenart benutzt wird.



  • Sone schrieb:

    Ordnung.

    Kellerautomat schrieb:

    Bullshit.

    Damit hast du mal selbst argumentiert 🙄



  • Also bei größeren Projekten finde ich namespaces schon praktisch, weil man dadurch eben nochmal eine Ordnung in dem Sinne schaffen kann, dass man weiß, dass gewisse Klassen eben zu einem "Komplex" gehören. Selbst wenn es sich um irgendeinen Spezialbereich handelt, in dem es keine Namensüberschneidungen gibt, ist es einfach angenehmer zu wissen, was wozu gehört.

    Und dann können die namespaces auch kongruent zu anderen Ordnungselementen stehen, beispielsweise zur Ordnerstruktur im Dateisystem (oder zusätzlich auch im MSVC-Projekt) oder auch zu Modulen, die einzeln kompiliert werden können.

    Namenskonflikte gehen in meinen Augen aus fehlender Struktur/Ordnung hervor, sodass namespaces dieses Problem quasi im Keim ersticken.



  • Sone schrieb:

    Damit hast du mal selbst argumentiert 🙄

    Es stimmt schon, dass namespaces Ordnung schaffen koennen, aber das ist nicht ihr Hauptnutzen. Ihr beide habt das so hingestellt, als ware das deren einziger Zweck, und das ist einfach nicht wahr.



  • Kellerautomat schrieb:

    Sone schrieb:

    Damit hast du mal selbst argumentiert 🙄

    Es stimmt schon, dass namespaces Ordnung schaffen koennen, aber das ist nicht ihr Hauptnutzen. Ihr beide habt das so hingestellt, als ware das deren einziger Zweck, und das ist einfach nicht wahr.

    Konfliktvermeidung lässt sich in diesem Kontext auch auf Ordnung deduzieren, denn die Logik hierbei ist folgende:

    Ordnung ➡ Keine Konflikte 👍
    Keine Ordnung ➡ Es gibt Konflikte, weil die verschiedenen Namen nicht in Namensräumen eingeordnet wurden. ⚠

    Ein Namensraum ist schließlich wie eine Mappe, in der andere Mappen (andere Namensräume) oder eben auch Zettel (Namen) sind. Schmeisst man stattdessen alle Zettel in eine Mappe (Globaler Namespace), wird es unordentlich.



  • Gugelmoser schrieb:

    Finde ich nicht. Ein Namensraum ist ja auch nicht dafür da, um Konflikte zu vermeiden. :p

    Laut Stroustrup ist genau das aber IIRC ihr Zweck.


Anmelden zum Antworten