[C++] TicTacToe Hilfe



  • Hallo Leute,

    ich habe ein Problem, und zwar werden die Meisten (aber nicht alle) "cout" und"system" unterschlängelt. Die Fehlermeldung Lautet:

    "cout"/"system" ist mehrdeutig!

    Bei einem anderen Beispiel:

    if (cSelectedField =='h'){
    ...
    }
    

    ist eine andere Fehlermeldung:

    Es wurde eine Deklaration erwartet

    Außerdem habe ich bei einer Variable auch noch ein Problem:

    int nSelectedField;
    ...
    nSelectedField--;
    

    Der Fehler (bei "nSelectedField--;"):

    Diese Deklaration hat keine Speicherklasse oder keinen Typspezifierer

    Die Fehler sind ALLE gleichzeitig gekommen, ich habe den Code nur etwas geändert! Ich benutze nur einfache Code, wie:

    cout<<
    /*Variable*/=getch();
    system ("CLS"/"Pause");
    if / for / while
    goto
    "Funktionen"
    

    Ich benutze nur :

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    

    Ich poste ungerne alles, weil es fast 300 Zeilen sind!

    Kann mir bitte jemand helfen, wesentlich sagen, was Falsch gemacht wurde (vielleicht auch nur teilweise oder Vermutungen)!

    Danke schon mal im Vor hinaus!

    HUND123



  • HUND123 schrieb:

    Vermutungen

    Die Fehler sind irgendwie schwachsinnig und passen nicht zu den gezeigten Beispielen. Eventuell hast du irgendwo eine geschweifte Klammer nicht geschlossen?



  • cooky451 schrieb:

    HUND123 schrieb:

    Vermutungen

    Die Fehler sind irgendwie schwachsinnig und passen nicht zu den gezeigten Beispielen. Eventuell hast du irgendwo eine geschweifte Klammer nicht geschlossen?

    Oder ein Semikolon vergessen...



  • Eine Klammer zu viel:

    }
    

    Warum ist C++ so "doof" und sagt nicht:

    Die Klammer wird nicht benötigt

    , sondern zeigt alles andere als Falsch!

    Das Gleiche gilt, wenn eine Klammer fehlt, beim Semikolion gibt es keine Probleme!

    Danke für die Antwort 😉

    HUND123



  • HUND123 schrieb:

    Warum ist C++ so "doof" und sagt nicht:

    Die Klammer wird nicht benötigt

    , sondern zeigt alles andere als Falsch!

    Wie die Fehlermeldungen, die du bei ungültigem Code bekommst, aussehen sollen, ist im C++-Standard nicht definiert. Das ist also eine Sache deines Compilers.



  • HUND123 schrieb:

    Warum ist C++ so "doof" und sagt nicht:

    C++ sagt gar nichts dazu, der doofe ist dein Compiler. Allerdings gibt es bestimmte Konstrukte, bei denen der Compiler nicht erraten kann was du falsch gemacht hast. 😉

    Deswegen immer ordentlich einrücken, dann fällt das eigentlich sofort auf:

    void foo()
    {
      lulz();
    }
    
    void bar()
    {
      for (int i = 0; i != 25; ++i)
        lulz();
    }
    
    void baz()
    {
      int i = 0;
      while (i < 0)
      {
        i = lulz();
        if (i == 5)
          lulz();
      }
    }
    
    int main()
    {
      foo();
      bar();
      baz();
    }
    


  • Gegenfrage: Wieso bist du zu doof, das richtig zu programmieren (oder alle Klammern richtig zu setzen)? 🕶
    Es ist im Grunde so: Man kann nach bekackten Minifehlern Stunden suchen. 😉



  • HUND123 schrieb:

    Warum ist C++ so "doof" und sagt nicht:

    Die Klammer wird nicht benötigt

    , sondern zeigt alles andere als Falsch!

    Darüber darfst du dich beschweren, sobald du mal einen C++ Compiler geschrieben hast.


  • Mod

    Der technische/philosophische Grund: Der Compiler sieht deine (vermutlich sowieso nicht vorhandene) Einrückung nicht. Es gibt daher keine logische Gliederung im Code, sondern nur reine Syntax. Nun ist die Syntax aber hochgradig kontextabhängig, man kann jede Menge Sachen in anderen Zusammenhängen anders interpretieren. Für den Compiler sieht das was nach der fehlenden Klammer kommt dann lange Zeit erst einmal noch richtig aus. Ist dann eben ein sehr komplexes Funktionsargument. Der Programmierer wird wohl wissen, was er tut. Und erst später, wenn dann irgendwann etwas kommt, was gar nicht passt, kann eine Fehlermeldung generiert werden. Und die wird dann in der Annahme generiert, dass das was bis dahin gelesen wurde richtig war. (Manche Compiler machen aber bessere Vorschläge, wenn sie einen von einer Liste sehr häufiger Fehler vermuten, z.B. Semikolon nach Klassendefiniton vergessen, die situationsabhängige, unpassende Fehlermeldung wird aber trotzdem generiert, könnte ja sein, dass das wirklich so gemeint war).



  • Wenn man ein Semikolon vergisst, wird das nächste Wort unterschlängelt und der Compiler sagt, dass ein ';' erwartet wird. Aber es sollte der Compiler doch erkennen, dass man eine Klammer schließt, obwohl es keine dazu passende Klammer gibt.

    Mit der fehlenden Klammer ist es schon schwerer, aber er gibt so komische Fehlermeldungen, die aufgar keinen Fall zutreffen können ... man wird sich schon daran gewöhnen, dass wenn auf einmal ganz viele Fehler auftreten, eine Klammer nicht Korrekt ist ...



  • HUND123 schrieb:

    Wenn man ein Semikolon vergisst, wird das nächste Wort unterschlängelt und der Compiler sagt, dass ein ';' erwartet wird. Aber es sollte der Compiler doch erkennen, dass man eine Klammer schließt, obwohl es keine dazu passende Klammer gibt.

    Mit der fehlenden Klammer ist es schon schwerer, aber er gibt so komische Fehlermeldungen, die aufgar keinen Fall zutreffen können ... man wird sich schon daran gewöhnen, dass wenn auf einmal ganz viele Fehler auftreten, eine Klammer nicht Korrekt ist ...

    Wenn ein Fehler auftritt, dann schaut man sich zunächst die Zeile an, wo er aufgetreten ist und überprüft dann auch Zeilen die davor oder dahinter liegen. Ein Compiler ist kein Mensch und kann deine Gedanken nicht lesen. Und ja, man gewöhnt sich an die Fehlermeldungen und weiß irgendwann woran es alles liegen könnte.


Anmelden zum Antworten