error: expected unqualified-id before ...

Guten Abend liebes Formum,

zu dem Fehler “error: expected unqualified-id before ...” gibt es sehr viele Einträge, leider haben diese mir bisher nicht geholfen.
Ich habe einen einfachen Code geschrieben und diese Fehlermeldung tauch immer wieder auf. Das Problem muss im Header liegen.

#include <Wire.h>
#include <SPI.h>
#include <SD.h>
File myFile;
int pinCS=53;
#include "RTClib.h"
RTC_DS3231 rtc;
#include "max6675.h"

//Max6675
//#include "max6675.h"
int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
int vccPin = 3;
int gndPin = 2;
float temp1 = 0;
float temp2 = 0,
//(END)

//RTC_DS3231
//#include <Wire.h>
//#include "RTClib.h"
//RTC_DS3231 rtc;
//(END)

//SD-Card
//#include <SD.h>
//#include <SPI.h>
//File myFile;
//int pinCS=53;
long previousMillis=0;
long interval=120000;
//(END)
  
void setup() {

#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif
  
  Serial.begin(9600);
  delay(3000); // wait for console opening
  
//MAX6675+++++++++++++++++++++++++++
  pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH);
  pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW);
  
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
//(END)

//RTC_DS3231++++++++++++++++++++++++
    if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
    rtc.adjust(DateTime(2018, 8, 16, 21, 7, 0));
  }
//(END)

//SD-Card+++++++++++++++++++++++++++
  pinMode(pinCS, OUTPUT);
  
  if(SD.begin()) // SD Card Initialisieren
  {
    Serial.println("SD card is ready to use.");
  }else{
    Serial.println("SD card initialization failed");
    return;
  }
  
  //Reading the file:
  myFile=SD.open("test.txt");
  if(myFile){
    Serial.println("Read:");
    //Reading the hole file
    while(myFile.available()){
      Serial.write(myFile.read());
    }
    myFile.close();
  }
  else{
    Serial.println("error opening test.txt");
  }
//(END)

}

void loop() {
  // basic readout test, just print the current temp +++++
   Serial.print("C = "); 
   Serial.println(thermocouple.readCelsius());
  //print date ++++++++++++++++++++++++++++++++++++++++++++
   DateTime now = rtc.now(); //defines now
   Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(" (");

   //write on SD-Card +++++++++++++++++++++++++++++++++++
     unsigned long currentMillis=millis();
  if(currentMillis-previousMillis>interval){
    myFile = SD.open("test.txt", FILE_WRITE);
    previousMillis=currentMillis;
    if(myFile){
      myFile.print(now.day(), DEC); myFile.print(".");
      myFile.print(now.month(), DEC); myFile.print(".");
      myFile.print(now.year(), DEC); myFile.print(" ");
      myFile.print(now.hour(), DEC); myFile.print(":");
      myFile.print(now.minute(), DEC);/* myFile.print(":");
      myFile.print(now.second(), DEC);*/ myFile.print(";");
      myFile.print(temp1); myFile.print(";");
      myFile.println(" ");
      myFile.close(); //close the File!!
      //delay(60000);
    }  else {
      Serial.println("error opening test.txt");
    }
  }
  //(END)
  
   delay(1000); // delet delay if more than one in void loop
}

Die gesamte Fehlermeldung lautet:

Termoelemente-SD-Karte-FreBA:33: error: expected unqualified-id before 'long'
 long previousMillis=0;
 ^
/Users/marvin/Documents/Arduino/Termoelemente_SD-Card/Termoelemente-SD-Karte-FreBA/Termoelemente-SD-Karte-FreBA.ino: In function 'void loop()':
Termoelemente-SD-Karte-FreBA:115: error: 'previousMillis' was not declared in this scope
   if(currentMillis-previousMillis>interval){
                    ^
exit status 1
expected unqualified-id before 'long'

Dabei lässt sich das Problem im gesamten Header positionieren vor jedem Zeilenanfang (deshalb sieht der Code so merkwürdig Kommentiert aus). Ich galub das ich estwas einfaches, aber wichtiges übersehen habe, vielleicht findet jemand von euch den Fehler.

Termoelemente-SD-Karte-FreBA.ino (3.28 KB)

Hier ist ein Fehler:

float temp2 = 0,

Und hier ist ein Fehler:

Serial.print(" (");
float temp2 = 0,

mach da mal einen Strichpunkt statt dem Beistrich

Die Zeile mit Serial passt schon so... :) Also: zumindest kompiliert das.

Danach hab ich drei Stunden gesucht.

Ihr seid die BESTEN!!!

LS4: Danach hab ich drei Stunden gesucht.

Ihr seid die BESTEN!!!

Hmmm... Wir haben einfach die Meldung gelesen! Und sind dem darin enthaltendem Tipp gefolgt. Das ist eigentlich keine große intellektuelle Glanzleistung.... Nur konsequent, sonst nichts.

Warum hast du das nicht so gemacht?

Leute müssten die Fehlermeldungen halt auch mal lesen und versuchen zu verstehen.

Man kann Fehlermeldungen auch Googeln wenn nur man den allgemeinen Teil nimmt (also keine Zeilennummern oder Variablennamen). In diesem Fall führt das zwar nicht zum Ziel, aber bei spezifischeren Fehlern findet man da öfters die Lösung.

C++ kann in bestimmten Situationen durchaus sehr kryptische Fehlermeldungen erzeugen. Und manchmal gibt es Folgefehler. Aber hier sagt der Compiler deutlich wo der Fehler liegt:

error: expected unqualified-id before 'long' long previousMillis=0;

Der Fehler ist also vor dieser Variable. Dann geht man dorthin. Darüber sind Kommentare die man ignoriert. Und genau über den Kommentaren ist die falsche Zeile

Generell deutet "unqualified-id" auf eine fehlerhafte Anweisung hin. Wie hier ein fehlender Strichpunkt. Oder auch ein zusätzliches Zeichen dass sich eingeschlichen hat. Der Compiler hängt dann immer bei darauf der folgenden Anweisung.

Leute müssten die Fehlermeldungen halt auch mal lesen und versuchen zu verstehen.

Dazu habe ich mir schon etwas den Kopf gemacht…
Die Beziehung zwischen Realität und Wahrnehmung.
Auch halbwegs das “Warum?” verstanden.
Eigentlich nicht, weil ich das Verhalten anderer analysieren will, sondern weil ich selber betroffen bin.

Bekanntlich: Matthäus 7:3

Was siehst du aber den Splitter im Auge deines Bruders,
den Balken aber in deinem Auge bemerkst du nicht?

Eben, weil ich selber betroffen bin, sehe ich den Splitter umso deutlicher.

Eine gewisse Sympatie zu den Fehlermeldungen braucht man schon und etwas Erfahrung welche Fehlermeldung der Hauptfehler ist und welche nur Folgemeldungen.

Grüße Uwe

Hi

UND: Meist ist der Fehler genau oberhalb der gemeldeten Stelle. Die gemeldete Zeile ist hier für Sich ja völlig ok - daß der Kompiler aber - blöd gesprochen - von ; bis ; liest, sieht Er Da was ganz Anderes.

Beim nächsten Fehler wird's einfacher und keine Angst: Du bekommst mit Sicherheit noch genügend Fehler zum Testen ;)

MfG