Ich schlage mich mit einem sehr merkwürdigen Problem herum. Ich habe meinen Quellcode auf die Minimalstruktur reduziert, bei der der Fehler auftritt:
Hier ist mein Code:
Hauptprogramm:
#include "RD_40.h"
void setup() {
// put your setup code here, to run once:
RD_40 myRD40;
}
void loop() {
// put your main code here, to run repeatedly:
}
Hier die Definition der Klasse RD_40. Enthalten im Tab RD_40.h:
#ifndef RD_40_H
#define RD_40_H
#include <Arduino.h>
class RD_40 {
private:
int _test;
public:
RD_40(); // Constructor
void begin();
};
#endif
Wenn ich dieses simple Programm (alle Funktionen weggelassen) compiliere, bekomme ich folgende Fehlermeldung:
c:/pfad.../bin/ld.exe: sketch\test_class.ino.cpp.o:(.text.setup+0x0): undefined reference to `_ZN5RD_40C1Ev'
c:/pfad.../bin/ld.exe: sketch\test_class.ino.cpp.o: in function `setup':
C:\pfad...\test_class/test_class.ino:5: undefined reference to `_ZN5RD_40C1Ev'
collect2.exe: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Generic ESP8285 Module.
Was um alles in der Welt stimmt da nicht? Bin ich blind?
@ all
Und natürlich kann man einen leeren Konstruktor in der *.cpp unterbringen, wie oben von @ludwig001 vorgeführt.
Das ist zwar überflüssig, aber nicht verboten.
vielen Dank für Eure prompte Rückmeldung! Zumindest geht es, wenn ich RD_40() {} im Header File angebe. Damit kann ich erst mal arbeiten
Ich müsste aber lügen würde ich behaupten, dass ich es verstanden habe. Ich hatte den Konstruktor im CPP File doch genau so definiert: RD_40::RD_40() {}. Klar, im Header stand nix von Default - lag es daran?
Der Sketch verwendet 227117 Bytes (17%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 21760 Bytes (6%) des dynamischen Speichers, 305920 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
Bevor ich #2 gepostet habe, habe ich das „Programm“ ebenfalls compiliert, falls evtl. noch andere Fehler als der offensichtliche, vorhanden sind. Es ist einwandfrei durchgelaufen.
Warum Dein Linker trotz Korrektur noch Probleme hat, ist ,zumindest für mich, nicht ersichtlich.
Hast Du evtl. in deinem Programmverzeichnis noch eine andere cpp Datei liegen, die hier bisher nicht erwähnt wurde?
Das Problem hängt mit der File Extension zusammen:
Ich hatte das cpp-File mit Großbuchstaben in der Extension benannt, also "RD_40.CPP". Dies führte offensichtlich dazu, dass das File nicht erkannt und daher auch nicht compiliert wurde. Wenn ich das File umbenenne in "RD_40.cpp" verschwindet der Fehler.