Hilfe bei Klassen C++ Arduino

OP #7610288
Lesenswert?

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

Angehängte Dateien:
OP #7610312
Lesenswert?

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?

OP #7610326
Lesenswert?

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

OP #7610329
Lesenswert?

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

#7610781
Lesenswert?

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ß.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren