- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: C++ Verweis aus einer C++ Datei auf Classen, Variablen in anderen C++Datei

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.10.2018
    Beiträge
    33

    C++ Verweis aus einer C++ Datei auf Classen, Variablen in anderen C++Datei

    Hallo kollegen.

    Will ein Arduno Sketch in Eclipse in einzelne Funktionen in separaten .cpp Dateien unterteilen.
    Aus Funktionen (= separate .cpp Dateien) wird auf globale Valiablen, Classen zugegrifen die der Datei1 deklariert sind.

    In .c kriegt man das mit „extern“ in Griff.
    Wie geht das in .cpp???

    Mein Versuch siet so aus
    ++++++++++++++++++++++++++++++++
    Datei1 - deklaration:

    // Shield Jumper on SW (using pins 12/13 or 8/9 as RX/TX)
    SoftwareSerial port(12, 13);
    EasyVR easyvr(port);

    Datei2 - Verweis auf die Classen in Datei1:

    extern "C" SoftwareSerial port(12, 13);
    extern "C" EasyVR easyvr(port);

    +++++++++++++++++++++++++++++++++

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Hallo,

    in C++ gibt es auch "extern": https://riptutorial.com/de/cplusplus...e/28730/extern
    Für mehr mal gogglen im Netz?

    In .c kriegt man das mit „extern“ in Griff.
    Ich weiß nicht, inwiefern Arduino-C++ sich wie echtes C++ verhält. Habe da keine Ahnung, aber ich verwende da auch "extern" für Variablen (auch in CPP-Dateien) und anderes.
    Extern kann man auch auf Klassen anwenden. Bin aber eher C/C++ - Laie. Für den Grad "Guru" beschäftige ich mich zu wenig und noch nicht lang genug damit.



    MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.10.2018
    Beiträge
    33
    Sorry wenn meine Aussagen falsch sind - bin kein C++ Programmierer.

    SoftwareSerial und EasyVR sind Classen - hab gerade in den Header Dateien gecheckt.
    Die werden im gleichen Zug deklariert und definiet.

    Datei1:
    SoftwareSerial port(12, 13);
    EasyVR easyvr(port);
    ++++++++++++++++++++++++++++++++

    Datei2:
    extern "C" SoftwareSerial port(12, 13);
    extern "C" EasyVR easyvr(port);


    Syntaktisch scheint alles OK zu sein - Eclipse meldet keinen Fehler.
    Nur der Compiler meint es handelt sich um eine Doppeldefinition.

    Wie gehe ich das Problemm um???

    project/setup.cpp.o (symbol from plugin): In function `port':
    (.text+0x0): multiple definition of `port'
    project/SprachSteuerung01.cpp.o (symbol from plugin).text+0x0): first defined here
    project/setup.cpp.o (symbol from plugin): In function `port':
    (.text+0x0): multiple definition of `irsend'
    project/SprachSteuerung01.cpp.o (symbol from plugin).text+0x0): first defined here
    project/setup.cpp.o (symbol from plugin): In function `port':
    (.text+0x0): multiple definition of `rcSwitch'
    project/SprachSteuerung01.cpp.o (symbol from plugin).text+0x0): first defined here
    project/setup.cpp.o (symbol from plugin): In function `port':
    (.text+0x0): multiple definition of `easyvr'
    project/SprachSteuerung01.cpp.o (symbol from plugin).text+0x0): first defined here
    collect2.exe: error: ld returned 1 exit status
    Geändert von arwar52 (24.11.2020 um 20:41 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    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.


  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.10.2018
    Beiträge
    33
    . . . 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);

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Was macht das "C" da ? Zumindest bei SoftwareSerial müsste das auch ohne "C" funktionieren.

    mfG

Ähnliche Themen

  1. AVR DOS, Uhrzeit nach überschreiben einer Datei.
    Von tomdul im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 01.09.2015, 17:31
  2. Hex.Datei für Steuerung einer Mischanlage
    Von Flitzek im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 08.03.2013, 16:36
  3. Zwei Word Variablen in einer anderen verpacken Schieberegist
    Von Fabi1234 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 17
    Letzter Beitrag: 11.12.2007, 17:44
  4. Erzeugen einer .Hex-Datei aus mehreren C-Quelltexten !!
    Von casa74 im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 13.06.2005, 21:33
  5. C Datei in Bin oder Hex Datei umwandeln
    Von MSSauerxxx im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 3
    Letzter Beitrag: 08.05.2005, 16:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress