Keine optionalen Parameter für Klassenmethoden bei ESP8266 ?

Hallo,
Ich habe eine Klasse mit einer Methode geschrieben, welche einen optionalen Parameter beinhaltet. Die Methode sieht so aus

uint16_t TwoSimpleWire::Receive(uint16_t timeOut = 2200)
{
//Something happens
}

Wenn ich als Board den Arduino Nano auswähle, funktioniert das Kompilieren fehlerfrei.
Wenn ich als Board allerdings den ESP8266 auswähle, dann bekomme ich folgende Fehlermeldung :

TwoSimpleWire.cpp:89:10: error: default argument given for parameter 1 of 'uint16_t TwoSimpleWire::Receive(uint16_t)' [-fpermissive]
   89 | uint16_t TwoSimpleWire::Receive(uint16_t timeOut = 2200)
      |          ^~~~~~~~~~~~~
In file included from C:\Users\matth\Documents\Arduino\Empfaenger_LongTest\TwoSimpleWire.cpp:10:
C:\Users\matth\Documents\Arduino\Empfaenger_LongTest\TwoSimpleWire.h:25:14: note: previous specification in 'uint16_t TwoSimpleWire::Receive(uint16_t)' here
   25 |     uint16_t Receive(uint16_t timeOut = 2200);
      |              ^~~~~~~
exit status 1
default argument given for parameter 1 of 'uint16_t TwoSimpleWire::Receive(uint16_t)' [-fpermissive]

Wenn ich den Default-Wert von 2200 weg lasse, funktioniert das kompilieren.

Nach Googeln von fpermissive bedeutet dieses Flag, dass der Compiler bestimmte Warnungen und Fehler quasi "durchgehen" lässt. Wobei es sich hier ja um gar keinen Fehler handelt.

Wie bekomme ich die Methode mit optionalem Parameter zum Laufen, bzw. warum funktioniert der Code auf einem Arduino Nano ohne Fehlermeldung ?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Andere C++ Version!
Schärfere Erkennung von Fehlern.
Wenn du die Warnungen abschaltest, sollte Ruhe sein.

Ihn in der Deklaration unterbringen


class Test
{
  public:
  void set(int v = 400);
};
void Test::set(int v) {Serial.println(v);}

Ihn in der Deklaration unterbringen

Vielen Dank, das funktioniert. Allerdings hatte ich Ihn vorher auch in der Deklaration untergebracht und ihn jetzt nur in der Implementierung rausgenommen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.