Timeout für Kanaleingabe konfigurierbar machen

  • Hallo,


    ich habe gerade versucht eine Option einzubauen, um das Timeout für die direkte Kanaleingabe über das Menü konfigurierbar zu machen. Klappt auch alles soweit ganz gut, nur schaffe ich es nicht den Timer auf den im Setup einstellbaren Wert zu setzen. Ich kenne mich einfach zu wenig mit C aus um zu verstehen was der Compiler meint.


    Hiermit wollte ich dem Timer den Wert zuweisen

    Code
    numberTimer.Set(Setup.ChannelNumberTimeOut);


    und krieg die Fehlermeldung

    Code
    menu.c:483: error: insufficient contextual information to determine type


    Warum weiss der Compiler hier nicht das es sich bei Setup.ChannelNumberTimeOut um einen Integer handelt obwohl ich ChannelNumberTimeOut in der config.h als Integer deklariert habe ?


    config.h

    Code
    int ChannelNumberTimeOut;


    Wie sag ich nun dem Compiler das es sich tatsächlich um einen Interger handelt ?



    Gruss


    Hollywood

    Server: VDR 2.4.1 mit Ubuntu 19.04 x64 mit vaapidevice, Kernel 5.2.9, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.1 mit Ubuntu 19.04 x64 mit softhddevice-OpenGL oder mit KODI+vnsiserver, Kernel 5.2.5, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Hi ich nochmal,


    soviel C-Profis hier und niemand hat nen Tip für mich ;(


    Ich habe nun ein wenig den Code durchstöbert und bin auf das Voranstellen von 2 Doppelpunkten gestossen. Habe meine Zeile nun so abgeändert

    Code
    numberTimer.Set(::Setup.ChannelNumberTimeOut);


    und der Compiler läuft ohne Fehlermeldung durch.


    Nun frag ich mich natürlich, was bewirken diese 2 Doppelpunkte ?


    Für ein wenig Aufklärung in C wäre ich wirklich dankbar.



    Gruss


    Hollywood

    Server: VDR 2.4.1 mit Ubuntu 19.04 x64 mit vaapidevice, Kernel 5.2.9, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.1 mit Ubuntu 19.04 x64 mit softhddevice-OpenGL oder mit KODI+vnsiserver, Kernel 5.2.5, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

    Einmal editiert, zuletzt von Hollywood ()

  • Zitat

    soviel C-Profis hier und niemand hat nen Tip für mich ;(


    Etwas mehr Geduld, dann klappts auch mit der Antwort...


    Ich interpretiere das mal so, dass du numberTimer.Set(::Setup.ChannelNumberTimeOut); in cMenuChannels::Number() in menu.c eingetragen hast.


    Es gibt eine Methode cMenuChannels::Setup(), und da dein Aufruf im Kontext von cMenuChannels liegt, ist das Symbol Setup automatisch das lokale cMenuChannels::Setup, also eine Funktion. Darauf einen Class-Member Operator ('.') anzuwenden, geht halt nicht.


    Durch das vorgestellte :: verlässt du den Kontext von cMenuChannels, und damit ist ::Setup wieder das, was du eigentlich meintest. Jedes globale Symbol kann immer eindeutig als ::Symbol angesprochen werden, sogar ::cMenuChannels::Setup. Kontexte funktionieren ähnlich wie Dateipfade, nur mit :: statt /.


    Gruß,


    Udo

  • Hallo Urig,


    du weisst doch wie das mit der Geduld ist, wenn man grad am basteln ist und nicht weiter kommt. ;)


    Zitat

    Ich interpretiere das mal so, dass du numberTimer.Set(::Setup.ChannelNumberTimeOut); in cMenuChannels::Number() in menu.c eingetragen hast.


    Ja genau. Allerdings war ich hier etwas voreilig, denn ich wollte eigentlich die Zeit zur Eingabe der direkten Kanalnummer verlängern, hab hiermit aber wohl nur die Kanaleingabe bei geöffneter Senderliste erwischt. Da muss ich wohl nochmal suchen, an welcher Stelle ich ändern muss, um mehr Zeit bei der Eingabe der Kanalnummern zu haben.


    Zitat

    Es gibt eine Methode cMenuChannels::Setup(), und da dein Aufruf im Kontext von cMenuChannels liegt, ist das Symbol Setup automatisch das lokale cMenuChannels::Setup, also eine Funktion. Darauf einen Class-Member Operator ('.') anzuwenden, geht halt nicht.


    Durch das vorgestellte :: verlässt du den Kontext von cMenuChannels, und damit ist ::Setup wieder das, was du eigentlich meintest. Jedes globale Symbol kann immer eindeutig als ::Symbol angesprochen werden, sogar ::cMenuChannels::Setup. Kontexte funktionieren ähnlich wie Dateipfade, nur mit :: statt /.


    Danke für deine Erklärung, das hab ich soweit verstanden, ist ja ähnlich wie in Delphi nur die Syntax von C war mir vollkommen unbekannt. Ausserdem finde ich die Fehlermeldung des Compilers irgendwie irreführend.


    BTW gibt es eigentlich ein gutes Tutorial, möglichst in deutsch, wo man genau solche Dinge nachlesen kann ? Es gibt zwar reichlich im Netz, aber bei denen die ich bisher gefunden habe wurden immer nur Dinge wie Variablendeklarationen oder allgemeine Stringfunktionen udg. beschrieben.



    Gruss


    Hollywood

    Server: VDR 2.4.1 mit Ubuntu 19.04 x64 mit vaapidevice, Kernel 5.2.9, ASRock J4105M, 2 x 4096 MB DDR4-RAM, 2 x DD Cine S2, Lirc-Serial mit One4All URC 7960
    Client: VDR 2.4.1 mit Ubuntu 19.04 x64 mit softhddevice-OpenGL oder mit KODI+vnsiserver, Kernel 5.2.5, ASRock H81M, Intel i3-4150, NVIDIA GPU GeForce GT 610 (GF119), 2 x 2048 MB DDR2-RAM, 1 x Technotrend S2-1600, SilverStone Milo ML03, ASRock Smart Remote CIR mit Logitech Harmony 650, Beamer 120'' FullHD-3D

  • Siehe "C++ Buch zum lernen und Befehls-Refferenz" Thread.
    Aber ich gebe zu, eine gute, leicht verständliche und vor allem vollständige Referenz könnte ich auch gebrauchen. Manchmal behelfe ich mich mit den original ISO-14882 Texten, aber die sind sehr schwer zu lesen.


    Gruß,


    Udo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!