Fehler im Programm: expected initializer before 'void'

Finde den Fehler nicht:

int Motor = 3;
int Schieb1 = 4;
int Stop = 5;
int Schieb2 = 6;

// das Ganze muß noch in das DCF77 Programm eingefügt werden. Ich muß aber bevor ich das mache sicher sein
//dass dieser Abschnitt fehlerfrei ist.Ich weiss nicht wie man in C++ Unterprogramme erstellt. Ich kenne es
//nur von AVR Assembler. Da schreibt man Label: geht mit rcall hinein und mit ret wieder heraus auf die
//letzte Adresse +1. Der Sinn dieses Programms ist, dass in der Zeit von 7.00 Uhr bis 21.00 Uhr in Abständen
// von 20 min das Unterprogramm (Funktionen) "Abfrage" läuft

int DCF77PIN2 ;


void setup()
{
  pinMode(Motor, OUTPUT);
  pinMode(Schieb1, OUTPUT);
  pinMode(Stop, OUTPUT);
  pinMode(Schieb2, OUTPUT);
  pinMode(DCF77PIN2, INPUT);
}

void loop() {

  digitalRead(DCF77PIN2);// hier muß ich noch prüfen ob dieser Befehl mir die Zeit vom DCF77 zeigt und ich das
  //auch abfragen kann
  void Std void();

  int Std
  if (Std <= 7) {
    goto loop;
  }

  if (Std == 7) {
    goto MIN;

    if (Std <= 21) {
      goto MIN;

      if (Std <= 24) {
        goto loop;
      }

      if (Std == 24) {
        goto loop;
      }

      void MIN void() {
        int min
      }

      digital Read PIN 2;
      if (min == 0) {
        goto Abfrage;
        continue;
      }

      if (min == 20) {
        goto Abfrage;
        continue;
      }

      if (min == 40) {
        goto Abfrage;
        continue;

        delay(50);
        goto loop;
      }

      void Abfrage void() {

        Motor = HIGH;
        delay(10000);
        Motor = LOW;

        Schieb1 = HIGH;
        delay(1000);
        Schieb2 = LOW;

        Stop = HIGH;
        delay(1000);
        Stop = LOW;

        Schieb2 = HIGH;
        delay(1000);
        Schieb2 = LOW;

        return;
      }
    }

Es geht um void Abfrage (void)

➜ ???

Sie können keine Funktion mit der Funktion loop() definieren
rücken Sie den Code ein und Sie werden sehen, dass etwas nicht stimmt.

Was soll das bedeuten?

Was soll goto loop; bedeuten? Meinst du return; ?

Auch das funktioniert nicht.
Merke:
Eine Funktion innerhalb einer Funktion funktioniert nicht und schmeißt Fehler.

return geht auch

Eine Funktion wird so definiert:

void Abfrage() {
 ...
}

(außerhalb einer anderen Funktion wie z.B. void loop() { ... } )
und aufgerufen, indem einfach
woanders im Code, z.B. innerhalb der geschweiften Klammern von loop,
Abfrage();
geschrieben wird.

Muss ich das Unterprogramm dann vor void loop setzen?

gut das probiere ich

Bei Arduino in einer .ino - Datei geht's auch danach.

C++ har keine Unterprogramme, sondern Funktionen, die du vor oder nach der loop schreiben kannst.
Aber dann so:
void Funktionsname (void)

so dr Fehler ist nun weg, dafür schreibt er jetzt: expected ';' before '(' token in der 4. letzten Zeile: goto Abfrage();

Na ja, void myFunc(); ohne Aufrufparameter und Rückgabewert ist eine Funktion, die man schon als Unterprogramm bezeichnen könnte, wenn man will.

1 Like

Dann zeig den kompletten Sketch, aber in Code-Tags.

[code]
int Motor = 3;
int Schieb1 = 4;
int Stop = 5;
int Schieb2 = 6;

// das Ganze muß noch in das DCF77 Programm eingefügt werden. Ich muß aber bevor ich das mache sicher sein
//dass dieser Abschnitt fehlerfrei ist.Ich weiss nicht wie man in C++ Unterprogramme erstellt. Ich kenne es
//nur von AVR Assembler. Da schreibt man Label: geht mit rcall hinein und mit ret wieder heraus auf die
//letzte Adresse +1. Der Sinn dieses Programms ist, dass in der Zeit von 7.00 Uhr bis 21.00 Uhr in Abständen
// von 20 min das Unterprogramm (Funktionen) "Abfrage" läuft

int DCF77PIN2 ;


void setup()
{
  pinMode(Motor, OUTPUT);
  pinMode(Schieb1, OUTPUT);
  pinMode(Stop, OUTPUT);
  pinMode(Schieb2, OUTPUT);
  pinMode(DCF77PIN2, INPUT);
}

void loop() {

  digitalRead(DCF77PIN2);// hier muß ich noch prüfen ob dieser Befehl mir die Zeit vom DCF77 zeigt und ich das
  //auch abfragen kann
  //    void Std void();

  int Std;
  if (Std <= 7) {
    goto loop;
  }

  if (Std == 7) {
    goto MIN;

    if (Std <= 21) {
      goto MIN;

      if (Std <= 24) {
        return loop;
      }

      if (Std == 24) {
        return loop;
      }

      { int min;
        digitalRead(DCF77PIN2);
        if (min == 0) {
          goto Abfrage();
          continue;
        }

        if (min == 20) {
          goto Abfrage();
          continue;
        }

        if (min == 40) {
          goto Abfrage();
          continue;

          delay(50);
          goto loop;
        }

        {
          Motor = HIGH;
          delay(10000);
          Motor = LOW;

          Schieb1 = HIGH;
          delay(1000);
          Schieb2 = LOW;

          Stop = HIGH;
          delay(1000);
          Stop = LOW;

          Schieb2 = HIGH;
          delay(1000);
          Schieb2 = LOW;

          return;
        }
      }
[/code]

Ok...ich habs anders gelernt.

Was soll das sein "Abfrage()"?
Sehe ich nicht in deinem Code.
Oder: Was soll das goto da?

Wenn man will, kann man auch rot und grün vertauschen.
Ich erinnere an den Fönig!

jetzt das korrigierte Programm.[code]
int Motor = 3;
int Schieb1 = 4;
int Stop = 5;
int Schieb2 = 6;

// das Ganze muß noch in das DCF77 Programm eingefügt werden. Ich muß aber bevor ich das mache sicher sein
//dass dieser Abschnitt fehlerfrei ist.Ich weiss nicht wie man in C++ Unterprogramme erstellt. Ich kenne es
//nur von AVR Assembler. Da schreibt man Label: geht mit rcall hinein und mit ret wieder heraus auf die
//letzte Adresse +1. Der Sinn dieses Programms ist, dass in der Zeit von 7.00 Uhr bis 21.00 Uhr in Abständen
// von 20 min das Unterprogramm (Funktionen) "Abfrage" läuft

int DCF77PIN2 ;

void setup()
{
pinMode(Motor, OUTPUT);
pinMode(Schieb1, OUTPUT);
pinMode(Stop, OUTPUT);
pinMode(Schieb2, OUTPUT);
pinMode(DCF77PIN2, INPUT);
}

void (Abfrage)void
{
Motor = HIGH;
delay(10000);
Motor = LOW;

Schieb1 = HIGH;
delay(1000);
Schieb2 = LOW;

Stop = HIGH;
delay(1000);
Stop = LOW;

Schieb2 = HIGH;
delay(1000);
Schieb2 = LOW;

return loop;

void (Std)void

int Std;
if (Std <= 7) {
loop;
}

if (Std == 7) {
MIN();

if (Std <= 21) {
  MIN();

  if (Std <= 24) {
    return loop;
  }

  if (Std == 24) {
    return loop;
  }

  void (MIN)void
  { int min;
    digitalRead(DCF77PIN2);
    if (min == 0) {
      Abfrage();
      continue;
    }

    if (min == 20) {
      Abfrage();
      continue;
    }

    if (min == 40) {
      Abfrage();
      continue;

      delay(50);
      return loop;
    }




    void loop() {

      digitalRead(DCF77PIN2);// hier muß ich noch prüfen ob dieser Befehl mir die Zeit vom DCF77 zeigt und ich das
      //auch abfragen kann
      Std()
      MIN()

    }
  }

[/code]

Ich rate dir zu einem C++ Grundlagenkurs, oder Buch, oder Tutorial.
Da steht genau drin, wie eine Funktion zu schreiben ist.
Und auch wie man diese verwendet.

Eine Funktion macht aus Eingangsparametern einen Ergebniswert. Und hat evtl. (bei Puristen unerwünschte) Seiteneffekte.
Da es bei C/C++ gar keine Unterprogramme gibt (da stimme ich dir und combie zu) könnte man ja schauen, was diesem Begriff wohl am nächsten kommt.

Weder Funktionen noch Unterprogramme werden übrigens mit goto aufgerufen.
Und weil Funktionen so allgegenwärtig sind, hat man bei der Erfindung von C auf das Schlüsselwort gosub einfach verzichtet. :wink:

in dem tutorial was ich habe, steht
goto Label;
Label:
so wollte ich es machen, ging nicht