Forum: PC-Programmierung Hilfe bei Klassen C++ Arduino


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Michael (oti)


Angehängte Dateien:

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

von Mark B. (markbrandis)


Lesenswert?

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
von Michael (oti)


Lesenswert?

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.

von Michael (oti)


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?

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

kein Bug, das PIO Buildsystem hat ./lib bzw. die Unterverzeichnisse 
davon als Suchpfad eingebaut, #include "I2C_Devices.h" reicht.

von Michael (oti)


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

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

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.

von Michael (oti)


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

: Bearbeitet durch User
von Εrnst B. (ernst)


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

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
Noch kein Account? Hier anmelden.