error: ISO C++ forbids comparison between pointer and integer

Hi,

Ich habe folgende Fehlermeldung 3 mal:

FFW_Torsteuerung:47: error: ISO C++ forbids comparison between pointer and integer

bei folgender Zeile:

if(clock.dateFormat(“N”, dt)==6 && clock.dateFormat(“G”, dt)==13 && clock.dateFormat(“i”, dt)>=0 && clock.dateFormat(“i”, dt)<=30)

Die Zeile soll prüfen ob es gerade Samstag, Zwischen 13:00 Uhr und 13:30 Uhr ist.
Ich benutze eine DS3231 Real Time Clock und diese Library :

https://github.com/jarzebski/Arduino-DS3231

Ich hoffe ihr könnt mir helfen was falsch ist.

Mfg Maddig

maddig:
Ich hoffe ihr könnt mir helfen was falsch ist.

Laut Funktionsdeklaration liefert die Funktion “dateFormat” einen char-Pointer zurück, also einen Zeiger auf einen String:

char* DS3231::dateFormat(const char* dateFormat, RTCDateTime dt)

Und Du vergleichst mit einer Integerzahl.

Das stuft der Compiler als Quatsch ein und erzeugt einen Error.
Und ich gebe dem Compiler Recht.

Wenn Du irgendwelche numerischen Zeitstempel in Strings umwandelst, müßtest Du mit einem String vergleichen und nicht mit einem Integer. Und ein Stringvergleich geht auch nicht mit “==” sondern mit der Funktion “strcmp”.

Das Handling mit Strings ist für die Aufgabenstellung “Die Zeile soll prüfen ob es gerade Samstag, Zwischen 13:00 Uhr und 13:30 Uhr ist.” der reinste Irrsinn, das löst man nur numerisch mit Zahlen und nicht mit Strings, wenn der Zeitstempel schon als numerischer Wert vorliegt.

Edit/Nachtrag: “dt” scheint eine struct.Variable zu sein, auf deren Elemente Du wie folgt zugreifen kannst (ungetestet):

if(dt.dayOfWeek==6 && dt.hour==13 && dt.minute>=0 && dt.minute<=30)

Hallo,

Ich habe das gleiche Problem beim verwenden von Thermistor2 (http://playground.arduino.cc/ComponentLib/Thermistor2).

Deine Lösung hat bei mir auch fast funktioniert, nur bekomme ich jetzt den error:

"E_Bike:113: error: request for member 'Temp' in 'Thermistor', which is of non-class type 'double ()(int)'"

Ich will den Temperaturwert des Thermistors mit einer Integer Zahl vergleichen, aber diese seltsamen Verschachtelungen verwirren mich total.

Wie kann ich den Wert anpassen, dass er vergleichbar ist?

request for member 'Temp' in 'Thermistor', which is of non-class type 'double ()(int)'

Heist auf Deutsch: 'Temp' ist eine Funktion (die einen int Parameter braucht und ein double ( bzw. float) liefert) , und kein Wert.

Müsstest du wohl die Funktion aufrufen, anstelle ihren Namen (=Adresse des Funktionscode) zu verwenden?

schwendi: Hallo,

Ich habe das gleiche Problem beim verwenden von Thermistor2 (http://playground.arduino.cc/ComponentLib/Thermistor2).

Deine Lösung hat bei mir auch fast funktioniert, nur bekomme ich jetzt den error:

"E_Bike:113: error: request for member 'Temp' in 'Thermistor', which is of non-class type 'double ()(int)'"

Ich will den Temperaturwert des Thermistors mit einer Integer Zahl vergleichen, aber diese seltsamen Verschachtelungen verwirren mich total.

Wie kann ich den Wert anpassen, dass er vergleichbar ist?

Selsame Verschachtelungen? Das ist Mathematik Sekundarstufe1, einfache Klammerrechnung!

Bitte Sketch hier reinstellen.

Tut mir leid, ich war jetzt ein paar Tage anderweitig beschäftigt…

hier der Sketch:

sketch_dec01a.ino (606 Bytes)

Das soll denn das:

if (Thermistor.Temp() >= 60)

Mit . greifst du auf Member von Klassen zu, aber doch nicht auf die lokalen und temporären Variablen von Funktionen

Den Rückgabe-Wert bekommst du wenn du die Funktion ganz normal aufrufst:

if(Thermistor() >= 60)
{
}

Dann kommt der Error " too few arguments to function 'double Thermistor(int)' "

Ich bin offensichtlich neu in der Welt des programmierens :D

Dann lese dir mal ein paar Tutorials über Funktionen durch bevor du willkürlich Code eintippst und hoffst dass es geht.

Das war mein Fehler. Man muss natürlich hier ein Argument an die Funktion übergeben.

So machst du es ja vorher sogar

 Serial.println(int(Thermistor(analogRead(A0))));

Wieso also bei der Abfrage des Wertes nicht auch so?

if(Thermistor(analogRead(A0)) >= 60)
{
}

Oder den Wert vorher einmal abspeichern und zweimal verwenden statt zwei Messungen zu machen

Vielen Dank!

Ja, ich habe sowieso vor mich da in den Weihnachtsferien mal ordentlich einzulesen :)