- 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
    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 19:41 Uhr)

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


  3. #3
    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);

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

    mfG

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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.645
    versuch mal so:

    "extern SoftwareSerial port;"

    anschließend:

    "port.begin(baudrate);"

    EasyVR kenne ich nicht.


    MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.10.2018
    Beiträge
    33
    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 15:20 Uhr)

Ä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, 16:31
  2. Hex.Datei für Steuerung einer Mischanlage
    Von Flitzek im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 08.03.2013, 15: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, 16: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, 20:33
  5. [ERLEDIGT] C Datei in Bin oder Hex Datei umwandeln
    Von MSSauerxxx im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 3
    Letzter Beitrag: 08.05.2005, 15:31

Berechtigungen

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

Labornetzteil AliExpress