glutBitmapString / glutStrokeString, кажется, требуют const unsigned char * - строки не работают - PullRequest
3 голосов
/ 28 июня 2011

Ubuntu 11.04, G ++, freeglut и GLUT.

Я совсем не понимаю этого. Вот ошибка, которую я получаю:

whatever.cc:315:59: error: cannot convert ‘std::string’ to ‘const unsigned char*’ for argument ‘2’ to ‘void glutStrokeString(void*, const unsigned char*)’

и если я попробую glutBitmapString:

whatever.cc:315:59: error: cannot convert ‘std::string’ to ‘const unsigned char*’ for argument ‘2’ to ‘void glutBitmapString(void*, const unsigned char*)’

Вот соответствующий код (я думаю).

scoreStream << "Score: " << score << "\0";
scoreString = scoreStream.str();

// ...in another method:

glRasterPos2i(0, 0);
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, scoreString);

Этот ответ говорит мне, что это должно работать, но это просто не так.

Цитата для тех, кто не хочет прыгать:

// Draw blue text at screen coordinates (100, 120), where (0, 0) is the top-left of the
// screen in an 18-point Helvetica font
glRasterPos2i(100, 120);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, "text to render");

(Кроме того, я попытался оставить там прямую строку, например «текст для рендеринга». Никаких кубиков.)

whatever.cc:315:64: error: invalid conversion from ‘const char*’ to ‘const unsigned char*’

Я в замешательстве. Насколько я помню, это мой первый вопрос о SO, поэтому прошу прощения, если он не слишком хорошо составлен. Я предоставлю любую дополнительную информацию, которую смогу.

1 Ответ

5 голосов
/ 28 июня 2011

Нет автоматического преобразования std::string в char const*.Однако вы можете использовать std::string::c_str(), чтобы получить char const* из std::string.

, например, glutBitmapString(GLUT_BITMAP_HELVETICA_18, scoreString.c_str());

Примечание. В ответе, на который вы ссылаетесь, не говорится, что выможно использовать std::string.В приведенном примере (glutBitmapString(GLUT_BITMAP_HELVETICA_18, "text to render");) используется строковый литерал , представляющий собой массив char, а не std::string.

Помните, что OpenGL - это библиотека C, иstd::string не существует в C.

...