error C2143: Syntaxfehler: Es fehlt ';' vor 'using'

  • Servus,
    kann mir einer mal Helfen?
    Habe folgenden Fehler..:

    Code
    error C2143: Syntaxfehler: Es fehlt ';' vor 'using'

    und so sieht die Datei aus(die .cppl):

    Was muss Ich verändern?

    Liebe Grüß,
    Bernd aus Wien

    MfG CBAT - Bernd / JN88EE

  • Dann liegt der Fehler in Form1.h
    Ich kann nur raten:

    Code
    namespace neu
    {
    // ...
    }; // <-- Da gehört ein Semikolon hin

    Bitte verwende doch Standard-C++!
    Das da kann man ja nicht mit ansehen!

    Viele liebe Grüße
    The User

  • Servus,
    Danke für deine Antwort.

    Ich weiß nicht ganz wie Du dass meinst - Ich poste mal Form1.h:


    Das ist der Ausschnit von Zeile 1 bis Zeile 42.

    Könntest Du mir da zeigen wie ich das genau abändern soll:?:
    Bitte und Danke Dir.. :D

    Grüße aus Wien

    MfG CBAT - Bernd / JN88EE

  • Habe es nun so geändert:

    Stimmt das so? Nämlich jetzt zeigt er bei mir 24 Fehler an.
    Und zwar folgende:

    Code
    error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    error C2143: Syntaxfehler: Es fehlt ';' vor 'using'
    error C2653: 'SendKeys': Keine Klasse oder Namespace <- Den Fehler ca. 6 Mal.
    error C3861: "Send": Bezeichner wurde nicht gefunden.  <-- Den Fehler auch ca. 6 mal.
     error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
     : fatal error C1004: Unerwartetes Dateiende gefunden.

    MfG CBAT - Bernd / JN88EE

  • Öhm, wollte ich es auf };}; ändern - schau ich davor den Entwurf an. Und siehe da er hat sich gelöscht!Das komplette Layout. Aber die Codes, etc sind noch da. Was jetzt? :shock::shock: Das steht nun im Code:

    Bitte helf mir! Ich brauch deine Hilfe.. :D

    MfG CBAT - Bernd / JN88EE

    Einmal editiert, zuletzt von Beernd (24. Mai 2009 um 14:28)

  • Danke Dir, es Klappt.
    Jetzt hät ich noch eine Frage, und zwar wie man einstellt z.B.: Ich habe 5 Buttons jeder bewirkt etwas anderes (dass ein Prozess gestartet wird, jeder macht was anderes) und dann gibt es einen Button der Stoppt alle 5 anderen Buttons (damit man keine 5 "Stop-Buttons" machen muss), wie geb ich ein, dass er sie nur einmal Stoppt, und nicht bis man das Programm neustartet..?

    Zum Beispiel: Ich klicke auf Button 1 und der verschiebt einzeln jedes .jpg-Bild in einen anderen Ordner. Dann klicke ich auf Stopp, bevor er alle verschoben hat. Und dann klicke ich auf Button 2 der sollte jedes .bmp-Bild in einen anderen Ordner verschieben. Aber er macht dies nicht. Nur bis ich das Programm neugestartet habe.

    EDIT: Hoffe jetzt ist es Verständlicher.. :D

    Grüße aus Wien

    MfG CBAT - Bernd / JN88EE

    2 Mal editiert, zuletzt von Beernd (24. Mai 2009 um 15:56)

  • Wie? "nur einmal stoppen"? Versteh ich nicht.
    Du musst noch verraten, was für eine Bibliothek du für die GUI verwendest. MFC oder was? Da habe ich keine Ahnung von, weil ich es lieber frei und cross-platform habe. Versuch allgemein zu beschreiben.

  • Zum Beispiel: Ich klicke auf Button 1 und der verschiebt einzeln jedes .jpg-Bild in einen anderen Ordner. Dann klicke ich auf Stopp, bevor er alle verschoben hat. Und dann klicke ich auf Button 2 der sollte jedes .bmp-Bild in einen anderen Ordner verschieben. Aber er macht dies nicht. Nur bis ich das Programm neugestartet habe.

    Sowas mein Ich. Und mit "Nur einmal Stoppen" meinte Ich - Er Stoppt den derzeitigen Prozess und blockt die anderen dann NICHT ab.

    MfG CBAT - Bernd / JN88EE

  • Okay.
    Dafür brauchst du ja keine Prozesse.
    Ich würde es so machen:
    -Du legst einen Thread für jeden dieser Vorgänge an in Form eines Thread-Objekts (hängt von der Threading-Bibliothek ab :D)
    -Die Objekte speicherst du in Form von Pointern
    -Beim Klick auf abbrechen prüfst du je Pointer, ob er != 0 ist und brichst den Thread dann ab

  • Öhm,
    dass Versteh ich auch schon wieder Nicht.

    Gibts net einfach n' Code den ich da hinschreiben kann, der Prüft welcher Timer gerade in Benutzung ist?

    Und dann hät ich gleich noch eine Frage: Kann ich Irgendwie den Stopp-Button auch mit der Taste F2 Verbinden?


    Danke für deine Hilfe, bist voll Nett! :D

    MfG CBAT - Bernd / JN88EE

  • Na dann ist ja wohl noch keine starke seelische Bindung vorhanden.^^

    Qt ist auf jeden Fall einen Versuch Wert, gibt so ein Komplettpaket für Windows:
    http://www.qtsoftware.com/downloads/sdk-windows-cpp
    Weiß nicht, ob da der passende Compiler bei ist, wenn bei der Installation gemeckert wird, gibt es hier MinGW.

    Dabei wird der ganze Kram, Threading, Timer, Dateimanagement, GUI... zur Verfügung gestellt und vor allem funktioniert es unter so gut wie allen Betriebssystemen. Im Moment wird auch daran gearbeitet, es auf Handys zu bringen.

    Der QtCreator, der da mitgeliefert wird, ist insebesondere für Einsteiger recht simpel und bietet auch Vorlagen etc.

    Da Buttons zu erzeugen bekommst du sicherlich schnell hin.
    Ein absolutes Minimal-Tutorial findest du hier. Die paar Minuten solltest du dir auf jeden Fall nehmen.
    Ausführliches Tutorial.

    Ich beschreibe dann mal, wie ichs machen würde:
    -Neues Projekt mitm Creator anlegen, die Vorlage erzeugt dir gleich die wichtigsten Dateien
    -Formular anpassen und die Buttons etc. hinzufügen
    Nun musst du dich entscheiden:
    Soll ein Button mehrfach geklickt werden, auch wenn die Operation noch nicht beendet wurde?
    Falls nein:
    -Erstelle im MainWindow für jeden Button einen Zeiger auf QThread (also QThread*)
    Falls ja:
    -Erstelle ein dynamisches Array aus QThread-Zeigern, z.B. std::list, std::vector, QList oder QVector

    Ich sag jetzt mal, du hättest dich für nein entschieden.

    Dann geb ich dir mal eine kleine Funktion:

    Code
    template<void (*function)()>
    class StartedThread : public QThread
    {
    public:
      void run()
      {
        function();
      }
    };


    Das musst du nicht verstehen, du wirst bloß unten sehen, wie du damit einen Thread startest. Füg es einmal ein und denk erstmal nicht drüber nach.

    Dann erstellst du Funktionen für die einzelnen Buttons. Z.B. Timer starten, Bilder verschieben etc.
    Fürs erste können die auch nix machen, was ausgeben oder sleep machen.

    Das hilft auch ein wenig, wenn du nicht willst, dass die Buttons mehrfach gedrückt werden:

    Code
    public slots:
      void disableButton1()
      {
        button1->setEnabled(false);
      }


    Wenn du jetzt einen Pointer auf QThread hast, der z.B. button1thread heißt, legst du eine Funktion an:

    Code
    void button1ThreadFinished()
      {
      }


    Genauso für alle anderen. (das public slots) brauchst du nur einmal.
    Wenn du im Designer den Button button1 genannt hast, kannst du es im Konstruktor dann so machen:

    Code
    button1thread = new StartedThread<funktionDieBmpVerschiebt>();
        connect(button1thread, SIGNAL(finished()), SLOT(button1ThreadFinished()));
        connect(button1thread, SIGNAL(terminated()), SLOT(button1ThreadTerminated()));
        connect(button1, SIGNAL(clicked()), button1thread, SLOT(start());
        connect(button1, SIGNAL(clicked()), SLOT(disableButton1()));


    usw.
    Dann noch die weiteren Funktionen:

    Code
    button1ThreadFinished()
    {
      QMessageBox::information(this, trUtf8("Erfolg"), trUtf8("Button1 hat seinen Job erfolgreich erledigt!"));
      button1->setEnabled(true);
    }
    button1ThreadTerminated()
    {
      QMessageBox::information(this, trUtf("Abbruch"), trUtf8("Button1 ist fertig mit der Welt, er wurde abgebrochen."));
      button1->setEnabled(true);
    }

    Den Kram musst du eben für jeden Button machen.
    Alternativ kannst du Präprozessor-Makros verwenden.

    Dann die Stop-Funktion (auch hinter den slots):

    Code
    void stop()
    {
      button1thread->terminate();
      ...
    }

    Jetzt fehlt im Konstruktor nur noch eine Zeile, die den Button ins Spiel bringt:

    Code
    connect(stopButton, SIGNAL(clicked()), SLOT(stop()));
    connect(new QShortcut(QKeySequence(tr("F2"), this)), SIGNAL(activated()), SLOT(stop()));

    Funktioniert alles auf den meisten Betriebssystemen, zumindest wenn ich mich nicht vertippt habe oder du die Vertipper entfernst. ;)

    Die Operationen musst du dann aber selber schreiben. ;)

    Viele liebe Grüße
    The User