Bin nun ganz meschugge und finde den Fehler nicht. Vllt habe ich das auch nicht alles verstanden: Die Fehlermeldung: 'I2C_Devices' does not name a type bei der Objektdefinition meine main.cpp (Aufrufe auskommentiert) I2C_Devices MyLCD; // !!!! das wird angemeckert mit Schlangenline int I2C_Adress_LCD; bool Flag_I2C_Adress_LCD; void setup() { Serial.begin(115200); delay(500); // auf seriellen Monitor warten Serial.println("\n +++++++++++ MAIN ++++++++++++"); //I2C_Adress_LCD = MyLCD.I2C_Address_Find(); //Flag_I2C_Adress_LCD = MyLCD.I2C_Address_Exist(I2C_Adress_LCD); } void loop() { } meine header Datei: class I2C_Devices { private: /* data */ public: bool I2C_Address_Exist(int I2C_Adress); int I2C_Address_Find(); }; meine cpp Datei: bool I2C_Devices::I2C_Address_Exist(int I2C_Adress) { bool Flag_I2C_Adress; /* ab hier Code */ return Flag_I2C_Adress; } int I2C_Devices::I2C_Address_Find() { int IC2_Address; /* ab hier Code */ return IC2_Address; } Habe mit Absicht alles zusammengeschrumpft. Hatte vorher alles in funktionen und die begonnen in eine Klasse auszulagern. Sicherlich habe ich irgendetwas, trotz vielem Lesen nicht verstanden. Danke M. für die, die es interessiert im Anhang die vollständigen files
Ich sehe in der main.cpp kein include für deine Klasse I2C_Devices. Also füge es dort hinzu: #include "I2C_Devices.h"
:
Bearbeitet durch User
Mark B. schrieb: > Ich sehe in der main.cpp kein include für dein I2C_Devices: > > #include "I2C_Devices.h" genau, das habe ich gerade auch festgestellt, danke fürs drübergucken, dass war es. Schönes WE. Habe mit meiner Schussligkeit mir den Vormittag versaut. Wird hoffentlich hängen bleiben. M.
Mark B. schrieb: > Ich sehe in der main.cpp kein include für deine Klasse das ist erledigt nun kommt nächsten Frage: Um Struktur zu bekommen habe ich neuen Pfad im Ordner lib angelegt und auch die Verweise entsprechend editiert (#include "../lib/My_I2C_Devices/I2C_Devices.h"). Arbeite mit PlatformIo und der Compiler meckert das an, obwohl der Editor mich genau zu dieser Datei hinführt. lib/My_I2C_Devices/I2C_Devices.cpp:2:10: fatal error: ../lib/My_I2C_Devices/I2C_Devices.h: No such file or directory #include "../lib/My_I2C_Devices/I2C_Devices.h" Hast Du eine Idee oder jemand anderes. thx M. ist das ein BUG?
:
Bearbeitet durch User
kein Bug, das PIO Buildsystem hat ./lib bzw. die Unterverzeichnisse davon als Suchpfad eingebaut, #include "I2C_Devices.h" reicht.
J. S. schrieb: > kein Bug, das PIO Buildsystem hat ./lib bzw. die > Unterverzeichnisse > davon als Suchpfad eingebaut, #include "I2C_Devices.h" reicht. wenn ich das richtig sehe aber nur wenn die dateien im scr-ordner liegen. nur dann meckert er das nicht an. Habe sie nun in den include-ordner gepackt, wie in der Readme beschrieben. Fehlermeldung lautet: (Rest habe ich gekürzt) Linking .pio\build\ESP32-30Pin-WROOM\firmware.elf c:/users/otistoshiba/.platformio/packages/toolchain-xtensa-esp32/bin/../ lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: .pio\build\ESP32-30Pin-WROOM\src\main.cpp.o:(.literal._Z5setupv+0x20): undefined reference to `I2C_Devices::I2C_Address_Find()' liegen sie nicht dort meckert er include fehler. Thx
:
Bearbeitet durch User
das ist jetzt ein Linker Fehler, da wurde das cpp nicht kompiliert. Die Magie liegt im LDF, https://docs.platformio.org/en/latest/librarymanager/ldf.html daran muss man sich halten.
J. S. schrieb: > das ist jetzt ein Linker Fehler, da wurde das cpp nicht > kompiliert. ach du sch... Da habe ich ja noch was vor mir. Gibt es irgendwo ein Beispiel? thx Nachtrag: eine Lösung habe ich gefunden. In der pio.ini ergänzen build_flags = -I include. Er linkt dann auch die Unterordner mit. Das wollte ich. SChönes WE allen M. mühsam ernährt sich das Eichhörnchen
:
Bearbeitet durch User
Michael schrieb: > eine Lösung habe ich gefunden. In der pio.ini ergänzen > build_flags = -I include. Ich würde dir wirklich Empfehlen, deine Verzeichnisstruktur so aufzubauen, wie platformio das vorsieht. In deinem anderen Thread hattest du ja dasselbe Problem, dass deine Dateien nicht in den dafür vorgesehenen Ordnern waren, und deshalb nicht kompiliert wurden. Ja, wenn man etwas Erfahrung damit hat, kann man das auch anders machen und in der platformio.ini hinbiegen. Aber für den Einstieg schießt du dir damit nur immer wieder selbst in den Fuß.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.