Problem mit gcc Compiler



  • Hallo,

    ich hab Linux (openSuse) und habe ein Problem mit dem gcc Compiler:
    Es kommt immer nach folgendem Befehl dieser Fehler:

    max@linux-graw:~> gcc TESTPROGRAMM.c
    TESTPROGRAMM.c:1: error: stray ‘\342’ in program
    TESTPROGRAMM.c:1: error: stray ‘\225’ in program
    TESTPROGRAMM.c:1: error: stray ‘\252’ in program
    TESTPROGRAMM.c:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
    TESTPROGRAMM.c:3: error: stray ‘\342’ in program
    TESTPROGRAMM.c:3: error: stray ‘\225’ in program
    TESTPROGRAMM.c:3: error: stray ‘\252’ in program
    TESTPROGRAMM.c:3: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
    TESTPROGRAMM.c:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<<’ token
    TESTPROGRAMM.c:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘>>’ token
    TESTPROGRAMM.c:16: error: expected identifier or ‘(’ before ‘if’
    TESTPROGRAMM.c:20: error: expected identifier or ‘(’ before ‘if’
    TESTPROGRAMM.c:24: error: expected identifier or ‘(’ before ‘}’ token
    TESTPROGRAMM.c:25: error: expected identifier or ‘(’ before ‘while’
    TESTPROGRAMM.c:26: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<<’ token
    TESTPROGRAMM.c:27: error: expected identifier or ‘(’ before ‘}’ token

    Was ist da falsch, oder hab ich vielleicht die Quelldatei nicht richtig geschrieben??

    Hier die Quelldatei:

    ╪include <ionstream>
    using namespace std;
    ╪include <stdlib.h>
    
    int main()
    {
        int Geraten;
        int SuchZahl;
        scrand(4);
        SuchZahl = rand() % 1000 + 1;
        do
        }
          cout << "Eine Zahl zwischen 1 und 1000! von Max" << endl;
          cin >> Geraten;
          if (Geraten < Suchzahl)
          {    
    	cout << "haha!!! zu klein!" << endl;
          } 
          if (Geraten > Suchzahl)
          { 
    	cout << "looooSER ... zu GROSS" << endl;
          } 
        }
        while (Geraten != SuchZahl);
        cout << "Du hast es voll drauf -RICHTIG" << endl;
    }
    

    Danke im Voraus und Viele Grüße,
    suppenkasper (15)



  • uiuiui

    1. falsches Forum
    2. iostream ist C++, das wirst du nie und nimmer durch den gcc (== C-Compiler) bringen
    3. Das Zeichen vor dem include sollte so ausschauen: #
    4. stdlib.h ist im Standard nicht vorgesehen für C++, da nimmst du bitte cstdlib.


  • Dieser Thread wurde von Moderator/in GPC aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • 1. scrand kenne ich nicht, das sollte srand heißen.
    2. geschlossene Klammer nach dem do passt nicht.
    3. der Header heißt iostream.

    Kommt mir stark wie ein Trollpost vor.



  • Hallo,

    das alles war ein Beispiel aus einem C++ Programmier Buch.
    Kennt jemand einen guten Compiler mit Linker für Linux (openSuse), bei Kdevelop komm ich irgendwie nicht mit (der Einrichtung) zurecht....(?)

    Viele Grüße,
    suppenkasper



  • DER Compiler unter Linux ist der GCC. Und kdevelop ist kein Compiler sondern eine IDE, wie ich finde eine recht gute.
    Und GCC ist mittlerweile nicht mehr der Gnu C Compiler sondern die Gnu Compiler Collection, das Prgramm für Kompilieren von C++-Sourcen heißt g++.
    Dazu solltest du die Quelldatei aber auch als .cpp/.cc/.cxx/usw. abspeichern, damit sie auch wirklich als C++ kompiliert wird. .c ist halt mal nur C...

    Und schreib das Beispiel korrekt ab, dann wird es mit g++ kompilieren.



  • das "&#9578" soll ein ungleichzeichen sein.
    Weis jemand eigentlich, wo die Sonderzeichen (Klammern usw.) auf kWrite sind?



  • suppenkasper61194 schrieb:

    das "&#9578" soll ein ungleichzeichen sein.
    Weis jemand eigentlich, wo die Sonderzeichen (Klammern usw.) auf kWrite sind?

    Die mußt Du auf der Tastatur suchen. Wenn '(' nicht auf Shift+8 liegt, ist die falsch erkannt worden oder in KDE das falsche Tastaturlayout eingestellt.



  • ok,
    ich stell jetzt nochmal meinen Quelltext rein:

    #include <iostream>
    using namespace std;
    #include <cstdlib>
    
    int main()
    {
        int Geraten;
        int SuchZahl;
        srand(4);
        SuchZahl = rand() % 1000 + 1;
        do
    
          cout << "Eine Zahl zwischen 1 und 1000! von Max" << endl;
          cin >> Geraten;
          if (Geraten < Suchzahl)
          {    
    	cout << "haha!!! zu klein!" << endl;
          } 
          if (Geraten > Suchzahl)
          { 
    	cout << "looooSER ... zu GROSS" << endl;
          } 
        }
        while (Geraten != SuchZahl);
        cout << "Du hast es voll drauf -RICHTIG" << endl;
    }
    

    Ist dieser richtig?
    Ich kompliere ihn jetzt mit der eingabe g++ TESTPROGRAMM.cpp in die konsole, folgende Fehler werden mir dann in der Konsole angezeigt:

    max@linux-graw:~> g++ TESTPROGRAMM.cpp
    TESTPROGRAMM.cpp: In function ‘int main()’:
    TESTPROGRAMM.cpp:15: error: expected ‘while’ before ‘cin’
    TESTPROGRAMM.cpp:15: error: expected ‘(’ before ‘cin’
    TESTPROGRAMM.cpp:15: error: expected ‘)’ before ‘;’ token
    TESTPROGRAMM.cpp:16: error: ‘Suchzahl’ was not declared in this scope
    TESTPROGRAMM.cpp:20: error: ‘Suchzahl’ was not declared in this scope
    TESTPROGRAMM.cpp: At global scope:
    TESTPROGRAMM.cpp:25: error: expected unqualified-id before ‘while’
    TESTPROGRAMM.cpp:26: error: expected constructor, destructor, or type conversion before ‘<<’ token
    TESTPROGRAMM.cpp:27: error: expected declaration before ‘}’ token
    max@linux-graw:~>
    

    Was mache ich falsch, oder funktioniert der GCC Complierer nicht richtig -das könnte nämlich durchaus sein.

    Viele Grüße,
    suppenkaser

    Ps.: Hat jemdand eine Anleitung für die Einrichtung der KDevelop? (neuste Version) ... lg 🙂

    EDIT: ‘ ist das selbe wie ' oder "" ... das zeigt das Forum hier irgendwie nicht richtig an



  • Du hast nach do eine geschweifte Klammer vergessen und einmal Suchzahl statt SuchZahl geschrieben.



  • so?

    #include <iostream>
    using namespace std;
    #include <cstdlib>
    
    int main()
    {
        int Geraten;
        int SuchZahl;
        srand(4);
        SuchZahl = rand() % 1000 + 1;
        do
          {  
          cout << "Eine Zahl zwischen 1 und 1000! von Max" << endl;
          cin >> Geraten;
          if (Geraten < SuchZahl)
          {    
    	cout << "haha!!! zu klein!" << endl;
          } 
          if (Geraten > Suchzahl)
          { 
    	cout << "looooSER ... zu GROSS" << endl;
          } 
        }
        while (Geraten != SuchZahl);
        cout << "Du hast es voll drauf -RICHTIG" << endl;
    }
    

    Konsole zeigt das an:

    [quote]TESTPROGRAMM.cpp: In function ‘int main()’:
    TESTPROGRAMM.cpp:20: error: ‘Suchzahl’ was not declared in this scope
    [quote]

    Ich zweifle langsam an meinem C++ Buch, daher hab ich nämlich alles genau abgeschrieben...?`!



  • suppenkasper61194 schrieb:

    Ich zweifle langsam an meinem C++ Buch, daher hab ich nämlich alles genau abgeschrieben...?`!

    Nein hast du nicht. Versuch doch mal zu verstehen was der Compiler von dir will.

    Wo genau deklarierst du denn die vom Compiler angemeckerte variable "Suchzahl"?



  • ok, hab es hinbekommen ... ich stell das Programm spätestens in 2 Tagen auf meine Webseite www.max-petter.de.tl

    DANKE @ all 😃



  • du solltest eins noch unbedingt ändern bzw. dir garnicht erst angewöhnen: die using-direktive gehört auf keinen FALL vor irgendwelche includierten header, sondern erst danach. Sonst verseuchst du den globalen Namensraum in den später eingebundenen Headern mit den Symbolen aus std in den vorherigen Headern und änders dadurch im Extremfall das Verhalten der Definitionen in den anderen Headern komplett.


Anmelden zum Antworten