Es funktioniert nur wenn es nur eine LEDControl() Funktion gibt, sonst
scheint der Compiler das nicht auflösen zu können.
1
[build] /home/jojo/projects/mbed-ce-hello-world/app_Fingerprint/main.cpp:25:27: error: no matching function for call to 'events::EventQueue::call(Adafruit_Fingerprint*, <unresolved overloaded function type>, uint8_t, uint8_t, uint8_t, uint8_t)'
die komplette Fehlermeldung ist etwas hardcore und im Anhang.
Wie kann ich dem Compiler helfen die richtige Funktion zu finden wenn es
überladene gibt?
Danke,
Aber je mehr ich mir das anschaue bin ich sicher das die beiden
Funktionen nicht unterschieden werden können. Beide passen mit den
varargs und der Compiler kann nicht wissen welche mir lieber ist.
Da hätte ich nur erwartet das eine Fehlermeldung mit ambiguous irgendwas
kommt.
J. S. schrieb:> Aber je mehr ich mir das anschaue bin ich sicher das die beiden> Funktionen nicht unterschieden werden können. Beide passen mit den> varargs und der Compiler kann nicht wissen welche mir lieber ist.
Doch, kann er. Daran liegt es nicht. Da ist ein const qualifier Problem.
Oliver
Wenn ich die nicht benutzte Funktion mit bool Argument auskommentiere
dann funktioniert es ja.
Bei diesem call musste ich auch die uint8_t typecasts angeben, sonst
ging es auch nicht. Aber es bedeutet das dieser call passt.
Der Compiler versucht die Überladungen von EventQueue.call() aufzulösen,
die cv-qualifiers passen nicht bei den Versionen mit const volatile. Das
ist ja auch keine Fehlermeldungen, sondern die notes mit denen der
Compiler versucht hat das aufzulösen.
J. S. schrieb:> Es funktioniert nur wenn es nur eine LEDControl() Funktion gibt, sonst> scheint der Compiler das nicht auflösen zu können.
Erwartest du, dass er aus der Anzahl der an ein variadisches Template
übergebenen Argumente und einem Aufruf innerhalb des Templates erkennt,
welche Funktion du meinst? Ich denke nicht, dass er das tut.
J. S. schrieb:> Wie kann ich dem Compiler helfen die richtige Funktion zu finden wenn es> überladene gibt?
Wenn der Compiler es nicht selbstständig auflösen kann, musst du
explizit angeben, welche du meinst. Das wird über die Cast-Syntax
gemacht, etwa so:
Bingo und Danke, so funktioniert es (mit uint8_t statt void als return
type).
Bis zum static_cast bin ich auch gerade gekommen, hatte da aber noch
nicht die richtige Syntax hinbekommen.
Ja, ein typedef entzerrt das. So einen Ausdruck zu bauen ist die eine
Sache, das zu verstehen wenn man es vorgesetzt bekommt eine andere...
Um die LED am Fingerprint Sensor ein und auszuschalten, für die Puristen
hier :)