Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelma stringstreamissä

mika132 [18.04.2012 18:13:05]

#

Eli muutan int tekstiä string muoton ja yritän ladata sitä ttf:llä ja sitten tulostaa. Mutta koodi ei toimi vaan ohjelma kaatuu. Käytin debuggeria avuksi, mutta todella outo ilmoitus tulee. Eikä anna edes rivi ehdotuksia.
Program received signal SIGILL, Illegal instruction.
In __DTOR_LIST__ () ()

ja koodi jota käytän on:

static SDL_Surface *Game::Tekstit::LoadTextString(const char *text, bool muuttuja, std::string muuttujan_arvo, TTF_Font *fontt, int Red, int Green, int Blue) {
    SDL_Color textcolor = {Red,Green,Blue};
    if (muuttuja) {
        char mjono[10];
        sprintf(mjono, "%s", muuttujan_arvo.c_str());
        SDL_Surface *tex = TTF_RenderText_Blended(fontt, mjono, textcolor);
        return tex;
    }
    else {
        SDL_Surface *tex = TTF_RenderText_Blended(fontt, text, textcolor);
        return tex;
    }
}

    SDL_FreeSurface(Tekstit::text_33);
    ss << paiva;
    sss << kuukausi;
    ssss << vuosi;
    paivaa = ss.str();
    mounth = sss.str();
    year = ssss.str();
    day = paivaa + " . " + mounth + " . " + year;
    Tekstit::text_33 = Tekstit::LoadTextString(" ", true, day, Fontit::font2, 255, 0, 0);

nimiavaruudessa Game on määritelty kaikki ss, sss, ssss streamit.

Ohjelma ei kaadu jos otan pois Tekstit::text_33 = Tekstit::LoadTextString(); rivin pois. Eli mikä vikana?

Ps. Niin ja konsoliin ohjelma kirjoittaa:
Process returned -1073741795 <0xC000001D>

jcd3nton [18.04.2012 18:27:54]

#

Mjono voi olla liian pieni. Miksi edes kaytat sprintf:aa merkkijonon kopioimiseen?

Teuro [19.04.2012 05:41:26]

#

Tästä saisi vielä tyylikkäämmän, mutta koodin rakenne pitäisi kirjoittaa melko lailla kokonaan uusiksi. Kuitenkin tässä vähän korjailtu versio.

mika132 kirjoitti:

static SDL_Surface *Game::Tekstit::LoadTextString(std::string teksti, int muuttuja) {
    std::string mjono = teksti;

    if (muuttuja) {
        mjono = apufunktiot::muunna_tekstiksi(muuttuja);
    }

    SDL_Surface *tex = TTF_RenderText_Blended(Game::fontti, mjono.c_str(), Game::textcolor);

    return tex;
}
/** Mikä näiden alla olevien rivien tarkoitus on?
    SDL_FreeSurface(Tekstit::text_33);
    ss << paiva;
    sss << kuukausi;
    ssss << vuosi;
    paivaa = ss.str();
    mounth = sss.str();
    year = ssss.str();
    day = paivaa + " . " + mounth + " . " + year;
**/
    ss << paiva << " . " << kuukausi << " . " << vuosi;
    Tekstit::text_33 = Tekstit::LoadTextString(day.str());

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta