- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 17

Thema: Callback Funktion mit static function pointer

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    48
    Beiträge
    408
    Hallo shepede ..
    Danke für deine Antwort .. als VB.Net Hobbyist kann ich das nur nicht umsetzten
    meiner Meinung nach habe ich einen Funktionspointer in der Header Datei deklariert
    und mit deiner "void (*TrackControl::sendmidi)(byte) = 0" initialisiert
    die cpp sieht jetzt so aus:
    Code:
    #include "TrackControl.h"
    #include <arduino.h>
    
    void TrackControl::setCallback (void (*pCallbackFunction)(byte)){
      void (*TrackControl::sendmidi)(byte) = 0;
      TrackControl::sendmidi=pCallbackFunction;
    }
    
    void TrackControl::setVolume (byte value){
      sendmidi(value);
    }
    die Fehlermeldung lautet:
    sketch/TrackControl.cpp:6: undefined reference to `TrackControl::sendmidi'

    die Lösung mit der statischen Klassen Funktion habe ich gewählt da ich sonst in jeder Instanz noch einen Pointer bräuchte und schon bei 70Prozent dynamischer Speicherauslastung bin
    und dann noch für 128 Instanzen Pointer bräuchte.

  2. #2
    shedepe
    Gast
    Lies dir noch mal durch wie man in C++ Statische Variablen verwendet. https://de.wikibooks.org/wiki/C%2B%2...nte_in_Klassen
    Nur im Headerfile anlegen reicht nicht, weil das dem Compiler nur sagt, es soll so eine Variable geben. Erst durch anlegen im C++ File wird diese auch wirklich erst im Speicher erstellt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    48
    Beiträge
    408
    und was ist mit der
    void (*TrackControl::sendmidi)(byte) = 0;

    in der cpp ist das keine Intitialisierung ?

  4. #4
    shedepe
    Gast
    Schau dir mal an was du geposted hast. Da steht das in einer Funktion drin.
    void TrackControl::setCallback (void (*pCallbackFunction)(byte)){
    void (*TrackControl::sendmidi)(byte) = 0;

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    48
    Beiträge
    408
    Sorry das ich dir da nicht folgen kann...

    du hast geschrieben das diese Zeile in der cpp fehlt ..die einzige cpp ist TrackControl.cpp bestehend aus 2 Funktionen .. also muss ich deine Zeile zwangsweise ja in eine Funktion legen.
    Danach hab ichs versuchsweise mal in der setup im .ino file probiert (vieleicht hast du ja die gemeint ) und habe trotzdem noch dieselbe Fehlermeldung.

    (dein Code snippet aus Post #2 kompiliert auch nicht fehlerfrei.)

    Ich hoffe hier findet sich noch jemand im Forum der in der Lage ist die 2 Zeilen Code die ich falsch habe zu berichtigen so daß ich das Konzept verstehen kann.
    Ich Suche jetzt schon mehrere Tage im Internet und finde keine Lösung für eine statische callback Methode.

    An alle noch eine schönes Wochenende

  6. #6
    shedepe
    Gast
    Dein Problem ist: Du willst eine statische Variable anlegen. Eine statische Variable im Headerfile anzulegen reicht nicht aus, weil aus einem Headerfile heraus der Compiler keine Speicherallokation durchführen kann. Deshalb musst du für eine statische Variable im allgemeinen Scope des C++ Files (Also nicht in einer funktion drin -> Da solltest du dir auch wirklich noch mal den Link den ich dir geposted habe durchlesen, ich poste das ja nicht umsonst).

    D.h. diese Zeile solltest du außerhalb des Funktionsscopes haben:
    void (*TrackControl::sendmidi)(byte) = 0;

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    48
    Beiträge
    408
    Hallo shepede ...
    wie schon gesagt ich habe diese zeile in der setup im .ino file probiert die Fehlermeldung ist die gleiche.
    Und in der CPP sind nur 2 Funktionen wo soll ich denn da außerhalb was hinschreiben.
    kannst du mir nicht konkret sagen wo genau diese Zeile stehen muss damit es funktioniert ?
    und den Link hab ich mehr als einmal gelesen.

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 17.02.2016, 20:09
  2. static inline ? warum static
    Von Siro im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.12.2010, 13:41
  3. Function Pointer - Verständnissproblem
    Von s.o. im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 01.05.2008, 09:34
  4. Static int Problem
    Von Spongebob85 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 19.01.2007, 23:25
  5. static beisst volatile
    Von StefPan im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 02.10.2006, 17:54

Berechtigungen

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

12V Akku bauen