nicht konstanten Parameter an konstantes argument übergeben



  • Hallo, bei Allegro gibt es folgende Funktion:

    textout_ex( screen, font, COLOR, 10, 10, makecol( 0, 0, 0), makecol( 0, 0, 0) );
    

    Ich möchte nun für den 3. Parameter COLOR (short) einsetzen, eine Variable die laufend geändert wird und einen Farbwert anzeigt.
    Dass Problem ist nun, man kann in den 3. Parameter nur "const char *" einsetzen. Gibts es nun irgendetwas wie ich die Funktion überlisten kann und letztendlich doch zum meinem Glück komme und COLOR einsetzen kann?
    Ich hätte da an const_cast gedacht, hat bei mir aber nicht funktioniert (vll. habe ich aber auch falsche Syntax angewendet). Kann mir bitte jemand helfen?

    MfG
    Stromberg



  • Das Problem scheint nicht zu sein, dass ein konstanter Parameter erwartet wird (weil variablen werden implizit zu konstanten. Nur andersrum geht es nicht), sondern eben ein char const* und kein short! Das wird schon so seinen Sinn haben. Lies nochmal die Doku nach, was die da genau erwarten.



  • Mh, aber es geht wirklich nur mit "const char *" oder ich steh auf dem Schlauch. Hier mein Test:

    char letter1 = 'a'; //Geht nicht
    textout_ex( screen, font, letter1, 10, 10, makecol( 0, 0, 0), makecol( 255, 255, 255) );
    const char *letter2 = "blabla"; //Geht
    textout_ex( screen, font, letter2, 10, 30, makecol( 0, 0, 0), makecol( 255, 255, 255) );
    

    H:\C++ Projekte\Allegro Trys\Examp1\main.cpp:56: error: invalid conversion from `char' to `const char*'
    H:\C++ Projekte\Allegro Trys\Examp1\main.cpp:56: error: initializing argument 3 of `void textout_ex(BITMAP*, const FONT*, const char*, int, int, int, int)'

    MfG
    Stromberg



  • letter1 ist ein char.
    letter2 ist ein Zeiger auf char.
    Das ist ein großer Unterschied.

    Edit: wenn du also &letter1 übergibst, dann kompiliert es.
    Da aber wahrscheinlich ein nullterminierter String erwartet wird, ist das eine ganz schlechte Idee.



  • Ich habe diese Fehlermeldung schon öfters gesehen. Meistens bedeutet sie eigentlich nur, dass Du zuwenig Args übergibst. Bei

    textout_ex übersieht man leicht einen Wert.

    Sonst gibt es eigentlich selten Fehler...

    textout_ex(buffer,font,x,y,makecol(Wert1,Wert2,Wert3),makecol(Wert4,..,..),
    "Dein Text%s",Cstring.c_str());
    
    textout_ex(buffer,font,x,y,makecol(Wert1,Wert2,Wert3),makecol(Wert4,..,..),
    "Dein Text %c",Char[X]);  // Diese Version gibt nur ein Zeichen aus.
    

    Vielleicht hilfts ja.


Anmelden zum Antworten