Hilfe bei Klassen C++ Arduino

OP #7610288

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

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.

OP

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

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

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

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

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.