Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
250
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MedRamBO MedRamBO ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Beiträge
    94
    Ich hab das Problem das eine überladene Funktion bei mir nicht funktioniert.
    Der Code sieht folgendermaßen aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
        void drawText(FONTSTYLE fontStyle, int x, int y, int r, int g, int b, int a, const char *text, ...) {
            D3DCOLOR fontColor = D3DCOLOR_ARGB(a, r, g, b);
            drawText(fontStyle, x, y, fontColor, text); 
        }
     
    //this works fine.. 
        void drawText(FONTSTYLE fontStyle, int x, int y, D3DCOLOR fontColor, const char *text, ...) {
            RECT rct;
            rct.left = x; 
            rct.top = y; 
            rct.right = rct.left + 300; 
            rct.bottom = rct.top + 200;
            va_list va_alist;
            char logbuf[80] = {0};
            va_start(va_alist, text);
            _vsnprintf(logbuf + strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist);
            va_end(va_alist);
            getFontByConst(fontStyle)->DrawText(NULL, logbuf, -1, &rct, 0, fontColor);
        }

    Wenn ich die obere funktion aufrufe klappt es nicht. Da die variablen parameter (representiert mit ...) nicht übergeben werden nehme ich an

    Wenn ich die untere funktion direkt aufrufe ist alles super.
     

  2. #2
    Avatar von RudolfG
    RudolfG RudolfG ist offline Mitglied Brokat
    Registriert seit
    Jul 2006
    Ort
    Gummersbach (NRW)
    Beiträge
    336
    Hi,

    Zitat Zitat von MedRamBO Beitrag anzeigen
    Ich hab das Problem das eine überladene Funktion bei mir nicht funktioniert.

    ...

    Wenn ich die obere funktion aufrufe klappt es nicht. Da die variablen parameter (representiert mit ...) nicht übergeben werden nehme ich an#.
    Was funktioniert nicht, was für Fehlermeldungen gibt es oder wie stellst du fest, dass es nicht funktioniert?

    Gruß
    RudolfG
     
    Technologien
    (Gute) Grundkenntnisse: HTML, CSS
    Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL

  3. #3
    MedRamBO MedRamBO ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Beiträge
    94
    Zitat Zitat von RudolfG Beitrag anzeigen
    Hi,



    Was funktioniert nicht, was für Fehlermeldungen gibt es oder wie stellst du fest, dass es nicht funktioniert?

    Gruß
    RudolfG
    Der code crasht die ganze applikation. Keine Fehlermeldung zu sehen.
    Ich denke mal der compiler weiß nicht wie er damit umgehen muss wenn eine Funktion eine variable argumentenliste enthält und diese dann an eine andere funktion weiter gegeben werden muss.

    Wenn ich den drawText aufruf in drawText ersetzte mit dem eigentlichen code, dann funktionert es.

    So:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
        void drawText(FONTSTYLE fontStyle, int x, int y, int r, int g, int b, int a, const char *text, ...) {
            D3DCOLOR fontColor = D3DCOLOR_ARGB(a, r, g, b);
            RECT rct;
            rct.left = x; 
            rct.top = y; 
            rct.right = rct.left + 300; 
            rct.bottom = rct.top + 200;
            va_list va_alist;
            char logbuf[80] = {0};
            va_start(va_alist, text);
            _vsnprintf(logbuf + strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist);
            va_end(va_alist);
            getFontByConst(fontStyle)->DrawText(NULL, logbuf, -1, &rct, 0, fontColor);
        }
     
    //this works fine.. 
        void drawText(FONTSTYLE fontStyle, int x, int y, D3DCOLOR fontColor, const char *text, ...) {
            RECT rct;
            rct.left = x; 
            rct.top = y; 
            rct.right = rct.left + 300; 
            rct.bottom = rct.top + 200;
            va_list va_alist;
            char logbuf[80] = {0};
            va_start(va_alist, text);
            _vsnprintf(logbuf + strlen(logbuf), sizeof(logbuf) - strlen(logbuf), text, va_alist);
            va_end(va_alist);
            getFontByConst(fontStyle)->DrawText(NULL, logbuf, -1, &rct, 0, fontColor);
        }

    Aber ich wollte ja eigenltich ein paar Zeilen einsparen, indem ich einfach die überladene drawText methode aufrufe. So hab ich den code quasi doppelt drin.
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Zitat Zitat von MedRamBO Beitrag anzeigen
    Ich denke mal der compiler weiß nicht wie er damit umgehen muss wenn eine Funktion eine variable argumentenliste enthält und diese dann an eine andere funktion weiter gegeben werden muss.
    Ich glaube eher, dass du nicht weißt, wie du damit umgehen musst Du rufst in der ersten Überladung von drawText nämlich die zweite Überladung ohne die variablen Argumente auf. Da müsstest du genau wie beim Aufruf von _vsnprintf mit va_start und va_end arbeiten.

    Grüße,
    Matthias
    MedRamBO bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    MedRamBO MedRamBO ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Beiträge
    94
    Klappt, danke matthias =)
     

Ähnliche Themen

  1. C Konsolenanwenung, Übergabe von Argumenten
    Von eternitysoft im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 20.05.10, 13:15
  2. Antworten: 1
    Letzter Beitrag: 09.06.08, 12:19
  3. Antworten: 2
    Letzter Beitrag: 31.03.08, 13:47
  4. Antworten: 3
    Letzter Beitrag: 23.04.05, 20:44
  5. Funktion mit variabler Anzahl von Argumenten
    Von andreassin im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 21.09.04, 19:00