ошибка: cannot convert ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘const char*’

187
27 января 2021, 12:40

в общем в opengl пытаюсь вывести текст, в opengl проекте. Но почему то выходит какая то синтаксическая ошибка.

Вот добавленный в проект код, почему жалуется на "превращения" хотя все заголовочные подключены

void RenderText(std::string message, SDL_Color color, int x, int y, int size) {
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0, gWindowWidth, 0, gWindowHeight); // m_Width and m_Height is the resolution of window
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glDisable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    GLuint texture;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    TTF_Font * font = TTF_OpenFont("pathToFont.ttf", size);
    SDL_Surface * sFont = TTF_RenderText_Blended(font, message, color);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sFont->w, sFont->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, sFont->pixels);
    glBegin(GL_QUADS);
    {
    glTexCoord2f(0,0); glVertex2f(x, y);
    glTexCoord2f(1,0); glVertex2f(x + sFont->w, y);
    glTexCoord2f(1,1); glVertex2f(x + sFont->w, y + sFont->h);
    glTexCoord2f(0,1); glVertex2f(x, y + sFont->h);
    }
    glEnd();
    glDisable(GL_BLEND);
    glDisable(GL_TEXTURE_2D);
    glEnable(GL_DEPTH_TEST);
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glDeleteTextures(1, &texture);
    TTF_CloseFont(font);
    SDL_FreeSurface(sFont);
}

вот ошибка

/home/comp/Qt_project/two/main.cpp:82: ошибка: cannot convert std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to const char*’ for argument 2 to SDL_Surface* TTF_RenderText_Blended(TTF_Font*, const char*, SDL_Color)’
     SDL_Surface * sFont = TTF_RenderText_Blended(font, message, color);
                                                                  ^

Некак не могу понять откуда она <string> подключён, СТД аж всю дивизию подключил <SDL2/SDL.h> <SDL2/SDL_ttf.h> <SDL2/SDL_video.h> <SDL2/SDL_render.h> <SDL2/SDL2_gfxPrimitives.h> Библиотеки также подключены.

Я догадываюсь что проблема в том что "компилятор может чего то не иметь " но незнаю как обойти.

Answer 1

TTF_RenderText_Blended принимает С-строку (const char *), а вы ему передаете std::string.

message -> message.c_str()

READ ALSO
Как вывести Response в alert()

Как вывести Response в alert()

Мне нужно вывести responseerrors

135
На маленьких экранах не работает кнопка

На маленьких экранах не работает кнопка

Более опытные разработчики, помогите, уже все испробовалВо время очередной верстки сайта у меня на маленьких экранах перестала работать...

128
Как сделать такой функционал в верстке?

Как сделать такой функционал в верстке?

посмотрите пожалуйста на мокапКрасные блоки - простой контент

116