Nur noch 9 (eigentlich 4 Fehler) im Code



  • Ein fehler ist übrig geblieben und zwar:
    ------------------------------------------------------------------------------
    (37) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    ------------------------------------------------------------------------------

    Der Rest waren tatsächlich "Rechtschreibfehler" bei cin habe ich << statt >> verwendet, zweimal hatte ich ein [space] zuviel und mal ein Simikolon zu viel !

    Der letzte Fehler jedoch sagt mir im Moment nix.. ich werde mal googeln.

    Zu guter Letzt : Danke für eure sauschnellen Antworten ! Ich hoffe, dass ich hier hin und wieder Support bekomme.

    EDIT sagt:

    Ich komm nicht dahinter... es scheint ja an den #include´s zu liegen... fehlt da einer oder sind sie in der falschen Reihenfolge (wenn sowas überhaupt relevant ist ?)



  • Heinek3n schrieb:

    Ein fehler ist übrig geblieben und zwar:
    ------------------------------------------------------------------------------
    (37) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    ------------------------------------------------------------------------------

    Das dürfte das Semikolon hinter der main-Funktion sein (hatte ich schon geschrieben). Du legst damit quasi nur eine Deklaration (keine Definition) der Funktion an, und im Anschluss steht dann im "leeren Raum" Inhalt in geschweiften Klammern. Dort darf aber nur sowas stehen, wenn es zu einer Funktion/Klasse gehört. Also meckert der Compiler, dass der Kopf dieser Funktion fehlt.

    falsch:

    int main();
    {
    

    richtig:

    int main()
    {
    


  • Aye, tatsache.. den hatte ich vergessen...

    Jetzt habe ich nurnoch den Fehler:

    error C2065: 'cout': nichtdeklarierter Bezeichner

    Das sollte ich ja wegbekommen ,wenn ich vor jedes cout oder cin ein std:: setze
    ODER ein use namespace std unter die #include´s setze, richtig ?

    ZU: use namespace std
    Irgendetwas fehlt da doch .. hab schleierhaft was in Erinnerung. Und muss es an eine bestimmte Stelle oder einfach direkt unter den 'include`s ?

    Danke



  • Du musst "using namespace std;" notieren, nicht "use".

    Übrigens: wenn du Min schon Sub nennst, dann nenne Mal doch auch Mul! 😃



  • _matze schrieb:

    Du musst "using namespace std;" notieren, nicht "use".

    Übrigens: wenn du Min schon Sub nennst, dann nenne Mal doch auch Mul! 😃

    wenn ich using namespace std; unter die #include´s setzte bekomme ich lauter :

    error C2784: "std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)": template-Argument für "std::basic_ostream<_Elem,_Traits> &" konnte nicht von "std::istream" hergeleitet werden. - FEHLER

    Und das mit MIN und MUL - ist das ironisch gemeint ? Bin wirklich erst am Anfang meiner C++ Laufbahn 😕



  • Heinek3n schrieb:

    wenn ich using namespace std; unter die #include´s setzte bekomme ich lauter :

    error C2784: "std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)": template-Argument für "std::basic_ostream<_Elem,_Traits> &" konnte nicht von "std::istream" hergeleitet werden. - FEHLER

    Zeig bitte noch mal den (kompletten) aktuellen Code.

    Heinek3n schrieb:

    Und das mit MIN und MUL - ist das ironisch gemeint ? Bin wirklich erst am Anfang meiner C++ Laufbahn 😕

    War nur Spaß. 😉 Du hast die Funktionen Add, Sub und Div notiert, aber dann Mal (nicht Mul wie multiplizieren). Nicht von mir verwirren lassen...



  • Ich muss zugeben ich mache nicht viel mit C++
    aber

    #include <String>
    

    mit grossem S kenne ich bisher noch nicht 😉

    MfG f.-th.



  • f.-th. schrieb:

    Ich muss zugeben ich mache nicht viel mit C++
    aber

    #include <String>
    

    mit grossem S kenne ich bisher noch nicht 😉

    MfG f.-th.

    Ist zumindest auf Windows-Systemen (Dateinamen nicht case-sensitive) wahrscheinlich egal, oder? Trotzdem ungewohnt... 😉



  • Heinek3n schrieb:

    error C2784: "std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)": template-Argument für "std::basic_ostream<_Elem,_Traits> &" konnte nicht von "std::istream" hergeleitet werden. - FEHLER
    

    Naja, schauen wir doch mal was da genau steht:

    Der Compiler hat einen operator<< gefunden, mit dem er Probleme hat. Genauer gesagt, mit dessen ersten Parameter, er erwartet einen std::basic_ostream<E,T>&, findet aber nur ein std::istream.
    Zusammengefasst: du hast operator<< auf einen istream angewandt.

    Wo, das sollte dir die Fehlermeldung eigentlich auch sagen, wenn du sie komplett liest. Oder du schaust selbst im Code nach:

    /* ... */
      int Zahl1;
      cin << Zahl1;
      cout << "Geben Sie nun die zweite Zahl ein !\n";
      int Zahl2;
      cin << Zahl2;
    /* ... */
      int op;
      cin << op;
    /* ... */
    


  • #include "stdafx.h"
    #include <iostream>
    #include <winsock.h>
    #include <String>
    #include <stdio.h>
    #include <stdlib.h>
    #include <Math.h>
    #include <New.h>
    #include <fstream>
    
    int
    add (int a, int b)
    {
      int c = a + b;
      return c;
    }
    
    int
    Sub (int a, int b)
    {
      int c = a - b;
      return c;
    }
    
    int
    Mal (int a, int b)
    {
      int c = a * b;
      return c;
    }
    
    int
    Div (int a, int b)
    {
      int c = a / b;
      return c;
    }
    
    int main ()
    {
      cout << "Wilkommen zum Mathe-Programm, geschrieben von Christian ! \n";
      cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
      cout << "Geben Sie die erste Zahl ein ! \n";
      int Zahl1;
      cin >> Zahl1;
      cout << "Geben Sie nun die zweite Zahl ein ! \n";
      int Zahl2;
      cin >> Zahl2;
      cout << "Wert1 = " << Zahl1 << " \n";
    cout << " Wert2 = " << Zahl2 << "\n";
    
      cout << "\n";
      cout << "Bitte geben Sie die Rechenoperation ein !\n";
      cout << "+++++++++++++++++++++++++++++++++++++++++\n\n";
      cout << "Beide Zahlen addieren, also Zahl 1 plus Zahl 2 = 1\n";
      cout << "Zahlen subtrahieren, also Zahl 1 minus Zahl 2 = 2\n";
      cout << "Zahlen multiplizieren, also Zahl 1 mal Zahl 2 = 3\n";
      cout << "Zahlen dividieren, also Zahl 1 durch Zahl 2 = 4\n";
      cout << "-----------------------------------------------\n\n";
      cout << "Ihre Eingabe ... : ";
    
      int op;
      cin << op;
      if (op == 1)
        {
          cout << "Hier Ihr Ergebniss!\n";
          cout << add (Zahl1, Zahl2);
          cout << "\n\n\n";
        }
      else if (op == 2)
        {
          cout << "Das ist Ihr Ergbniss!\n";
          cout << Sub (Zahl1, Zahl2);
          cout << "n\n\n";
        }
      else if (op == 3)
        {
          cout << "Dein Ergebniss Du Lappen!\n";
          cout << Mal (Zahl1, Zahl2);
          cout << "n\n\n";
        }
      else if (op == 3)
        {
          cout << "Kannst das nicht im Kopf, Du Flachzange?\n";
          cout << Div (Zahl1, Zahl2);
          cout << "n\n\n";
        }
      else if (op < 4)
        {
          cout << "Du bist zu blöd zum scheissen, nochmal Neustarten!\n";
        }
    
      cout <<
        "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
      cout <<
        "Danke dass Sie meinen Rechner benutzt haben. Sie sind zu dumm zum Kopfrechnen!\n";
      cout <<
        "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
    
      return 0;
    }
    

    Fehlermeldungen nun:
    --------------------
    34 x error C2065: 'cout': nichtdeklarierter Bezeichner
    Mit den #includes hab ich n bisschen rumgespielt, nach dem MOtto: Mehr kann nicht schaden.



  • Und wenn ich using namespace std; unter die #include´s setzte bekomme ich lauter :

    error C2784: "std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)": template-Argument für "std::basic_ostream<_Elem,_Traits> &" konnte nicht von "std::istream" hergeleitet werden. - FEHLER 😞



  • Wirf mal die ganzen unsinnigen Header raus die du da einbindest....

    Für deinen Code benötigst du nur <iostream>.


  • Mod

    Irgendwie wird der Code jedesmal schlechter, anstatt besser. Liest du dir überhaupt durch, was hier geschrieben wird?

    // #include "stdafx.h"      Wozu?
    #include <iostream>
    // #include <winsock.h>     Wozu?
    // #include <String>        string schreibt man klein. Außerdem: Wozu?
    // #include <stdio.h>       Das heißt erstens cstdio und zweitens: Wozu?
    // #include <stdlib.h>      Das heißt ersten cstdlib und zweitens: Wozu?
    // #include <Math.h>        math.h schreibt man klein und zweitens heißt das cmath, drittens: Wozu?
    // #include <New.h>         1. new.h schreibt man klein. 2. Das heißt new, nicht new.h. 3. Wozu?
    // #include <fstream>       Wozu?
    
    using namespace std;    // Du verwendest allerlei Zeug aus std, da ist es durchaus gerechtfertigt, ein using namespace zu setzen
    
    int
    add (int a, int b)
    {
      int c = a + b;
      return c;
    }
    
    int
    Sub (int a, int b)
    {
      int c = a - b;
      return c;
    }
    
    int
    Mal (int a, int b)
    {
      int c = a * b;
      return c;
    }
    
    int
    Div (int a, int b)
    {
      int c = a / b;
      return c;
    }
    
    int main ()
    {
      cout << "Wilkommen zum Mathe-Programm, geschrieben von Christian ! \n";
      cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
      cout << "Geben Sie die erste Zahl ein ! \n";
      int Zahl1;
      cin >> Zahl1;
      cout << "Geben Sie nun die zweite Zahl ein ! \n";
      int Zahl2;
      cin >> Zahl2;
      cout << "Wert1 = " << Zahl1 << " \n";
    cout << " Wert2 = " << Zahl2 << "\n";
    
      cout << "\n";
      cout << "Bitte geben Sie die Rechenoperation ein !\n";
      cout << "+++++++++++++++++++++++++++++++++++++++++\n\n";
      cout << "Beide Zahlen addieren, also Zahl 1 plus Zahl 2 = 1\n";
      cout << "Zahlen subtrahieren, also Zahl 1 minus Zahl 2 = 2\n";
      cout << "Zahlen multiplizieren, also Zahl 1 mal Zahl 2 = 3\n";
      cout << "Zahlen dividieren, also Zahl 1 durch Zahl 2 = 4\n";
      cout << "-----------------------------------------------\n\n";
      cout << "Ihre Eingabe ... : ";
    
      int op;
      cin >> op;               // Das ist >> und nicht <<
      if (op == 1)
        {
          cout << "Hier Ihr Ergebniss!\n";
          cout << add (Zahl1, Zahl2);
          cout << "\n\n\n";
        }
      else if (op == 2)
        {
          cout << "Das ist Ihr Ergbniss!\n";
          cout << Sub (Zahl1, Zahl2);
          cout << "\n\n\n";     // Du meinst wohl dreimal newline, nicht n und zweimal newline
        }
      else if (op == 3)
        {
          cout << "Dein Ergebniss Du Lappen!\n";
          cout << Mal (Zahl1, Zahl2);
          cout << "\n\n\n";     // Siehe oben
        }
      else if (op == 3)
        {
          cout << "Kannst das nicht im Kopf, Du Flachzange?\n";
          cout << Div (Zahl1, Zahl2);
          cout << "\n\n\n";     // Siehe oben
        }
      else if (op < 4)
        {
          cout << "Du bist zu blöd zum scheissen, nochmal Neustarten!\n";
        }
    
      cout <<
        "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
      cout <<
        "Danke dass Sie meinen Rechner benutzt haben. Sie sind zu dumm zum Kopfrechnen!\n";
      cout <<
        "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
    
      return 0;
    }
    

    Denk bitte über das nach, was ich kommentiert habe anstatt einfach nur froh zu sein, dass dein Programm jetzt funktioniert. Du kannst viel dabei lernen.



  • Hab ich ... immernoch

    error C2065: 'cout': nichtdeklarierter Bezeichner

    langasam verzweifel ich ... könnte jemand den Code mal kopieren und bei sich versuchen zu kompilieren ?

    Wäre shr nett...

    Greez Heinek3n



  • So, wenn ich nur #include <iostream> benutze bekomme ich diesen Fehler:

    warning C4627: "#include <iostream>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    1> "stdafx.h" Direktive hinzufügen oder vorkompilierten Header erneut erstellen

    wenn ich #include "stdafx.h" UND using namespace std; darunter schreibe, kommt wiedderum:

    error C2065: 'cout': nichtdeklarierter Bezeichner (34 x)

    und

    error C2871: 'std': Es ist kein Namespace mit diesem Namen vorhanden (1x)

    Wo ist da der Wurm drin ?


  • Mod

    Heinek3n schrieb:

    Hab ich ... immernoch

    error C2065: 'cout': nichtdeklarierter Bezeichner

    langasam verzweifel ich ... könnte jemand den Code mal kopieren und bei sich versuchen zu kompilieren ?

    Wäre shr nett...

    Greez Heinek3n

    Bezieht sich das auf meine Korrekturen oder auf die von Janjan? Wenn mein Code nicht compiliert, solltest du auf der Stelle deinen Compiler löschen.



  • Denkst du auch ein wenig mit, oder probierst du nur wild rum?
    <iostream> wird benötigt, denn dort sind die Streaming-Klassen definiert die du mit cout benutzt. Dort ist auch cout deklariert. Also MUSST du diesen Header einbinden.

    Wenn du "using namespace std;" nicht nutzt, so muss du jedesmal den Namensraum von cout mit angeben, das heußt du musst immer std::cout schreiben anstatt cout.

    "stdafx.h" musst du einbinden, weil du das vorkompiliere von Headerdateien in Visual Studio aktiviert hast für dein Projekt. Schlechte Idee. Am besten du erstellst ein neues leeres Win32 Console Application Projekt, und machst einen Haken bei "Empty project".



  • Natürlich versuche ich mitzudenken,.. wie gesagt, ich bin seit einer Woche dabei.

    <iostream> wird benötigt, denn dort sind die Streaming-Klassen definiert die du mit cout benutzt. Dort ist auch cout deklariert. Also MUSST du diesen Header einbinden.

    Dann bekomme ich die erste Fehlermeldung:

    warning C4627: "#include <iostream>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
    1> "stdafx.h" Direktive hinzufügen oder vorkompilierten Header erneut erstellen.

    Wenn du "using namespace std;" nicht nutzt,[...]

    Nutze ich, hier die ersten drei Zeilen des Codes:

    #include <iostream>
    #include "stdafx.h"
    using namespace std;
    

    Da bekomme ich den Fehler:

    error C2871: 'std': Es ist kein Namespace mit diesem Namen vorhanden

    und weiter:

    error C2065: 'cout' / 'cin' : nichtdeklarierter Bezeichner

    Ich werd weiter in meinem Wälzer weiterlesen.. hab jez noch ca 700 Seiten vor mir.

    Falls jmd doch noch eine Lösung hat -die er selbst erfolgreich kompiliert hat-
    würde ich mich freuen, diesen zu bekommen.

    THX - Heinek3n


  • Mod

    Lies doch bitte mal mehr als die ersten drei Sätze der Beiträge:

    Janjan schrieb:

    "stdafx.h" musst du einbinden, weil du das vorkompiliere von Headerdateien in Visual Studio aktiviert hast für dein Projekt. Schlechte Idee. Am besten du erstellst ein neues leeres Win32 Console Application Projekt, und machst einen Haken bei "Empty project".

    Ich klinke mich hiermit aus der Diskussion aus. Manche Leute wollen einfach nicht geholfen werden.



  • Der Code von SeppJ auf Seite 2 ist einwandfrei kompilierbar. Die einzige Änderung, die du machen musst, ist #include "stdafx.h" ganz oben einzufügen (bzw. wieder zu 'entauskommentieren'), wenn präkompilierte Header bei dir eingeschaltet sind (was offensichtlich der Fall ist). Ich garantiere dir, dass du, wenn du diesen Code 1:1 übernimmst und meinen Rat bzw. präkompilierte Header befolgst, das Programm übersetzen kannst.


Anmelden zum Antworten