2011-06-27 38 views
3

Ubuntu 11.04,G ++,freeglut和GLUT。glutBitmapString/glutStrokeString似乎需要const unsigned char * - 字符串不工作

我完全不理解這一點。這是我得到的錯誤:

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); 

This answer告訴我它應該工作,但它沒有。

報價爲那些誰不想跳:

// 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的問題,如果它沒有太好的組合,我很抱歉。我會提供任何額外的信息。

回答

5

std::string沒有自動轉換爲char const*。但是,您可以使用std::string::c_str()std::string中獲取char const*

例如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.

+0

存在,我會盡力的,謝謝! 編輯:不,仍然得到這個錯誤。它希望const _unsigned_ char *出於某種原因。 whatever.cc:315:67:error:從'const char *'無效轉換爲'const unsigned char *' –

+3

只需強制轉換:'(const unsigned char *)scoreString.c_str()' –

+0

我看到你意思是關於在C庫中使用C++的東西。這是我自己的第一個OpenGL,所以我很缺乏經驗。