undefined reference to `_ZN8GPIO_Pin2OnEh'

OP #7605155
Lesenswert?

Bin gerade dabei einen mehrseitigen Code zu strukturieren (die Scrollerei nervt). Da ich kaum Ahnung von objektorientierter Programmierung habe, versuche ich mich an einem einfachen Script (Board isr ESP8266 mit PlatformIO). Der Compiler gibt immer Fehlermeldung undefined reference to `_ZN8GPIO_Pin2OnEh' meine main:

1
//#include <Arduino.h>
2
#include "..\lib\GPIO.h"
3
GPIO_Pin LED;
4
void setup() {
5
  // pinMode(LED_BUILTIN, OUTPUT);
6
  LED.On (LED_BUILTIN);
7
}
8
void loop() {/*
9
  digitalWrite(LED_BUILTIN, HIGH);                        
10
  delay(250);                                                digitalWrite(LED_BUILTIN, LOW);                          
11
  delay(250);                                           
12
  */
13
}

meine h-Datei:

1
#if defined(ARDUINO) && ARDUINO >= 100
2
#include <arduino.h>
3
#else
4
#include "WProgram.h"
5
#endif
6
#ifndef __GPIO_h 
7
#define __GPIO_h
8
class GPIO_Pin { 
9
private:
10
     byte GPIO_Pin;
11
public:
12
   void On(byte GPIO_Pin); 
13
};
14
#endif

meine cpp-Datei

1
#include "..\lib\GPIO.h"
2
void GPIO_Pin::On(uint8_t GPIO_Pin){
3
    pinMode(GPIO_Pin, OUTPUT);
4
    digitalWrite (GPIO_Pin,HIGH);
5
}

Kann mir jemand auf die Sprünge helfen???

[Edit: code-tags hinzugefügt - Mod.]

Angehängte Dateien:
#7605166
Lesenswert?

Schau mal in deinen "lib"-Ordner, da sollte eine README vom Projekt-Init drinnen liegen, die dir sagt, dass du einen Unterordner unter lib brauchst.

d.H. pack dein GPIO.cpp /GPIO.h in einen "myGPIO" Ordner unterhalb von lib, pass die includes an, und es sollte passen.

BTW, ändert aber nix an deinem Problem: Michael schrieb im Beitrag #7605155:

#include "..\lib\GPIO.h"

ist unschön, der Pfad-Trenner für #includes ist "/", nicht "".

Und vmtl. reicht dir später ein #include <GPIO.h>, wenn die Dateien im richtigen Ordner liegen.

Und der Header heißt "Arduino.h", nicht "arduino.h"...

und welchen sinn macht dein byte GPIO_Pin; Member in der Klasse, wenn du sie nie verwendest?

--> Im Anhang wie's zumindest kompiliert.

Angehängte Dateien:
OP #7605197
Lesenswert?

Εrnst B. schrieb:

d.H. pack dein GPIO.cpp /GPIO.h in einen "myGPIO" Ordner unterhalb von lib, pass die includes an, und es sollte passen.

das habe ich getan Fehlermeldung: lib\MyGPIO\GPIO.cpp:1:10: fatal error: ../lib/MyGPIO/GPIO.h: No such file or directory

ist unschön, der Pfad-Trenner für #includes ist "/", nicht "".

habe ich geändert, kommt vom DOS / ist besser, da keien ALTGR-Taste nötig.

Und der Header heißt "Arduino.h", nicht "arduino.h"...

meine Nachlässigkeit

und welchen sinn macht dein byte GPIO_Pin; Member in der Klasse, wenn du sie nie verwendest?

ist für später

Und vmtl. reicht dir später ein #include <GPIO.h>, wenn die Dateien im richtigen Ordner liegen.

Die Struktur habe ich nicht verstanden. Welcher Ordner ist denn der richtige? Habe die 2 Dateien auch in den include Ordner gepackt, mit der selben Fehlermeldung. Der Editor bietet sie mir zum auswählen an.

Nachtrag: liegen sie im Include-Ordner lautet die Fehlermeldung c:/users/otistoshiba/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcu\src\main.cpp.o:(.text.setup+0x4): undefined reference to `_ZN8GPIO_Pin2OnEh' collect2.exe: error: ld returned 1 exit status *** [.pio\build\nodemcu\firmware.elf] Error 1

Nachtrag: liegen sie im selben Ordner wie main, läuft der Compiler durch. Da habe ich das mit den Ordnern wohl überhaupt nicht verstanden.

Thx erstmal

OP #7605237
Lesenswert?

Jim M. schrieb:

Die GPIO.o die vom GPIO.cpp erstellt wurde wird aus irgendeinem Grund nicht mit an den Linker verfüttert.

Mach mal in die GPIO.cpp ein

[c] #error 1

undefined reference to `_ZN8GPIO_Pin3OffEh' bleibt als Fehler. Kompiliert sauber wenn die Dateien im main.cpp Ordner liegen. Der Editor zeigt mir aber dem / die weiteren Ordner/Dateien zu Auswählen an. Was bewirkt die Direktive #error1

thx

Nachtrag: #error-Direktive wird verwendet, um den Kompilierungsvorgang mit einer (optionalen) Fehlermeldung abzubrechen habe ich gelesen. Ist meine Schlußfolgerung richtig, dass der Compiler das cpp nicht compiliert, ansonsten würde der eine 1 als Fehlermeldung ausgeben?

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