0

「ES 2.0 プログラミング ガイド」というタイトルの一見人気のある本を読んでいます。この本には、三角形を描画するための簡単な ES 2.0 プログラムのサンプル コードがあります。これは、コンパイルの問題を引き起こしているプログラムのスニペットです。

int Init ( ESContext *esContext )
{
   UserData *userData = esContext->userData;
    //etc... rest of the function
}

コンパイルしようとすると、3 行目でエラー C2440: cannot convert void * to UserData * が表示されます。

プログラムの後半に、関連していると思われるエラーがいくつかあります。

   // Load the vertex/fragment shaders
   vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
   fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );

ここで、コンパイラは vShaderStr と fShaderStr に問題があります: GLbyte * は const char 型の param と互換性がありません *

変換で何が問題になっていますか? esContext->userData で問題が発生するのはなぜですか?

サンプル コードは C で示されています。C++ でコンパイルしようとしていますが、これがどのように影響しているのか正確にはわかりません。

誰でも私にいくつかのガイダンスを与えることができますか? C++ でサポートされていない C コンポーネントはありますか? エラーを作成している何らかの種類の C++ コンポーネントはありますか?

助けてくれてありがとう!完全なサンプル コードは、ここで表示できます。

4

1 に答える 1

0

C と C++ の間の主な非互換性の 1 つは、型変換にあります。

特に、C ではvoid*、キャストを必要とせずに a を他のポインター型に自由に変換できます。この自由は C++ には存在しません。a を別のものに変換するには、キャストが必要void*です。

于 2013-06-04T14:14:00.880 に答える