Es gibt zwei Dateien: project/setup.cpp.o und SprachSteuerung01.cpp.o
port, irsend, rcSwitch und easyvr sind dort aus irgend einem Grund doppelt definiert.
Es gibt zwei Dateien: project/setup.cpp.o und SprachSteuerung01.cpp.o
port, irsend, rcSwitch und easyvr sind dort aus irgend einem Grund doppelt definiert.
. . . genau das ist mein Problemm.
Die Classen (port, irsend, rcSwitch und easyvr) sollen in Datei1 definiert werden und
in Datei2 soll darauf verwiesen werden.
Wie in C : man definiert eine globale Variable in Datei1
in Datei2 verweist man mit "extern" auf diese Variable
und schon kann man diese Variable in Datei2 nutzen.
++++++++++++++++++++++++++++++++++++++++++++
Noch mal hier wie es in der Dateien aussiet:
Datei1
IRsend irsend;
RCSwitch rcSwitch = RCSwitch();
SoftwareSerial port(12, 13);
EasyVR easyvr(port);
Datei2
extern IRsend irsend;
extern RCSwitch rcSwitch;
extern "C" SoftwareSerial port();
extern "C" EasyVR easyvr(port);
Die 2 ersten Einträge für "irsend" und "rcSwitch" scheinen OK zu sein.
und dann
ERROR
../../Datei2.cpp:21:30: error: no matching function for call to 'EasyVR::EasyVR(SoftwareSerial (&)())'
extern "C" EasyVR easyvr(port);
Was macht das "C" da ? Zumindest bei SoftwareSerial müsste das auch ohne "C" funktionieren.
mfG
. . . kann sein - hab alles mögliche ausprobiert.
Es geht nur um diese 2 Einträge in Datei2
1. extern SoftwareSerial port();
2. extern "C" EasyVR easyvr(port);
Der 2. Eintrag ist mit dem Syntax Fehler markiert:
<< Invalid arguments ' Candidates are: EasyVR(const EasyVR &) EasyVR(Stream &) >>
Kann leider nichts damit anfangen
Der Compiler beklagt sind auch über "SoftwareSerial port();":
error: request for member 'begin' in 'port', which is of non-class type 'SoftwareSerial()'
port.begin(9600);
versuch mal so:
"extern SoftwareSerial port;"
anschließend:
"port.begin(baudrate);"
EasyVR kenne ich nicht.
MfG
Wie schon erwähnt programmiere ich nur notgezwungen in C++.
Daher sind meine Aussagen unten nicht unbedingt korrekt, haben aber funktioniert.
Datei1:
IRsend irsend;
- „IRsend“ ist eine Classe von der wird eine neue Classe „irsend“ erzeugt
RCSwitch rcSwitch = RCSwitch();
- Das gleiche wie oben, nur der neuen Clasee wirg gleich ein Wert zugewiesen
In diesem Fall wert einer Funktion RCSwitch();
Geanu wie int A = 5;
SoftwareSerial port(12, 13);
- Hier bin ich mir nicht sicher, kann sein dass die neue Classe „port“ von Classe „SeftwareSerial“ unbedingt Parameter braucht
EasyVR easyvr(port);
- Wie gerade beschrieben
#define pcSerial SERIAL_PORT_MONITOR
- Anweisung an den Preprozessor das Wort „pcSerial“ durch „SERIAL_PORT_MONITOR“ zu ersetzen (SERIAL_PORT_MONITOR ist auch eine Classe)
Datei2;
extern IRsend irsend;
extern RCSwitch rcSwitch;
extern SoftwareSerial port;
extern EasyVR easyvr;
- "Übergabe" der Classen an die Datei2 mit „extern"
#define pcSerial SERIAL_PORT_MONITOR
- Preprozessor Anweisung wird in Datei2 wiederholt
Geändert von arwar52 (04.12.2020 um 16:20 Uhr)
Lesezeichen