Fehler Ethern: cannot declare parameter 'client' to be of abstract type 'Client'

Hallo zusammen,

ich habe ein Projek tim Internet gefunden, beim Verifizieren bekomme ich folgenden Fehler:

cannot declare parameter 'client' to be of abstract type 'Client'

Kann mit kurz jemand Helfen wonach ich da suchen muss? -

Hier der komplette Auszug:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:30:15: note: virtual int Client::connect(const char*, uint16_t)
virtual int connect(const char *host, uint16_t port) =0;
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Client.h:30:15: note: candidate expects 2 arguments, 0 provided
Multiple libraries were found for "OneWire.h"
Used: C:\Users\Stoffl\Documents\Arduino\libraries\OneWire
Not used: C:\Users\Stoffl\Documents\Arduino\libraries\DS18S20
cannot declare parameter 'client' to be of abstract type 'Client'

Anbei der Sketch sketch_nov15e.ino

Danke
Christoph

sketch_nov15e.ino (13.4 KB)

stoffl6781:
Kann mit kurz jemand Helfen wonach ich da suchen muss? -

Kann Du mir mal kurz helfen, WAS Du da eigentlich gepostet hast?

Wenn ich mal raten soll, hast Du uralten Arduino-Code für irgendeine Vor-1.0-Version der Arduino-IDE aus dem Internet gezogen, Dateiendung .pde, und diesen Code versuchst Du nun mit einer IDE Version 1.0 oder höher zu kompilieren.

Und Anpassungen an die IDE-Version 1.0 oder höher (Dateiendung .ino) hast Du nicht gemacht, sondern Du versuchst, den unveränderten Steinzeit-Code von Anno Dunnemals laufen zu lassen, nur eben nicht mit einer uralten Compilerversion, sondern mit einer wesentlich neueren Arduino-Version, stimmt's?

Ja stimmt, beim öffnen wurde ich gefragt, ob ich es "wandeln" will in ein neues Format. Habe ich gemacht. Ergebnis wie gepostet.

also es gibt Steinzeit Code und neuen Code - verstehe.

Anbei der Content:
https://nicegear.co.nz/blog/arduino-controlled-networked-thermostat/

Wie der Fehler sagt, kannst du natürlich kein Objekt einer abstrakten Klasse erzeugen. Und Server ist heutzutage abstrakt, d.h. die Klasse enthält nur rein virtuelle Methoden:

class Server : public Print 
{
public:
  virtual void begin() =0;
};

Oder in anderen Worten: die Server Klasse ist nur ein Interface um eine bestimmte Implementierung zu erzwingen

Davon ist dann EthernetServer abgeleitet und von der Klasse kann man Objekte erzeugen. Wie hier:

EthernetServer server(80);

Das gleiche gilt für die Client Klasse. Da ist es EthernetClient

Nachtrag:
Deine Fehlerbeschreibung ist über Client was du mal als Parameter verwendest

void serve_request(Client client)

Ganz oben ist aber Server genauso verwendet. Weiß nicht wieso das nicht angemeckert wird. Das hatte ich als erstes gesehen

Aber selbst wenn das ausbessert ist, ist der Code ist an mehreren Stellen verbesserungsfähig...

stoffl6781:
Ja stimmt, beim öffnen wurde ich gefragt, ob ich es "wandeln" will in ein neues Format.

Es sieht ganz so aus als wenn es nicht damit getan ist, die Dateiendung von ".pde" auf ".ino" zu wandeln.

Da sind wohl ein paar zusätzliche Änderungen notwendig, und zwar im Code und von einem erfahrenen Programmierer.

Derjenige, der die Änderungen vornimmt, sollte sich im besten Fall sowohl mit den alten Libraries und der alten Syntax (vor Arduino 1.0) als auch mit den neuen Libraries und der neuen Syntax (ab Arduino 1.0 und höher) auskennen.

Der Code selbst ist ziemlicher Kraut-und-Rüben-Code.

Was soll denn das überhaupt sein? Ich habe mal versucht, durch den Code durchzusteigen, und das scheint wohl irgendwie ein kombinierter "HTTP Webclient" mit einem "HTTP Webserver" zu sein.

Im Webserver-Teil des Codes kann man sich den aktuellen Betriebszustand ausgeben lassen und Einstellungen verändern.

Im Webclient-Teil des Codes kann man in regelmäßigen Zeitabständen Daten an einen Webserver im Internet übermitteln, der diese dann weiter verarbeitet.

Das ganze scheint aber kaum ordentlich durchdacht zu sein: Zum Beispiel scheint zwar der Server, an den die Daten im Internet übermittelt werden können, einstellbar zu sein. Aber die IDs der Dallas-Temperatursensoren sind im Code hartcodiert, so dass man nicht mal einen anderen Sensor anschließen kann, ohne direkt im Code die Sensor-ID ändern zu müssen.

Das Ding ist doch eine Totgeburt.

Warum willst Du so einen experimentellen und wenig durchdachten Code von 2011, der seit der ersten Kraut-und-Rüben-Codeversion gar nicht mehr weiterentwickelt wurde und zu heutigen Arduino-IDEs nicht mehr kompatibel ist, überhaupt zum Laufen bekommen?

Man kann wie gesagt mal probieren Server -> EthernetServer und Client -> EthernetClient und hoffen dass es dann kompiliert.