1

を使用してフラグを使用しwxWidgets-2.9.1てソースからコンパイルしようとしているとき。エラーに遭遇しましたc++0xgcc-4.6

narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive] ファイル内src/gtk/dcclient.cpp。エラーは次のファイルから発生します。

  1. src / gtk / bdiag.xbm
  2. src / gtk / cdiag.xbm
  3. src / gtk / fdiag.xbm
  4. src / gtk / horiz.xbm
  5. src / gtk / verti.xbm
  6. src / gtk / cross.xbm

これは既知のバグです。 http://trac.wxwidgets.org/ticket/12575 必要に応じて実行しましたが、プログラムは正常にコンパイルされています。

diff基本的に、ファイルには2種類の修正があります

//ファイル内dcclient.h

  1. ハッチング[i]=gdk_bitmap_create_from_data(NULL、bdiag_bits、bdiag_width、bdiag_height); ハッチング[i]=gdk_bitmap_create_from_data(NULL、reinterpret_cast <const char *>(bdiag_bits)、bdiag_width、bdiag_height);

    //ファイルbdiag.xbmおよびすべての*.xbmファイルの同様の修正

  2. static char bdiag_bits [] = {

    static unsigned char bdiag_bits [] = {0x80、0x80、0x40、0x40、0x20、0x20、0x10、0x10、0x08、0x08、0x04、0x04、0x02、0x02、0x01、0x01、0x80、0x80、0x40、0x40、0x 0x20、0x10、0x10、0x08、0x08、0x04、0x04、0x02、0x02、0x01、0x01};

私は2番目を理解しましたfixが、最初のものを理解できませんでした。なぜ関数を実行する必要があるreinterpret_cast< const char* >のですか?関数gdk_bitmap_create_from_dataは次のように宣言されています。

typedef char   gchar;//in some other header file

GdkBitmap* gdk_bitmap_create_from_data (GdkDrawable *drawable, const gchar *data, gint width, gint height);

数行後の同じファイルdcclient.cppで、次のを呼び出してgdk_bitmap_create_from_dataもエラーは発生しません。

char* data = new char[data_size];
//...
GdkPixmap* pixmap = gdk_bitmap_create_from_data(mask, data, dst_w, dst_h);

ここでは、型キャストは必要ありません。なぜreinterpret_castを実行する必要があるのstatic unsigned char*ですか?

4

2 に答える 2

1

unsigned charsigned charおよびchar(「プレーン char」とも呼ばれます) は、3 つの異なるタイプです。unsigned char*との間の変換はありませんchar*

于 2011-07-22T00:19:00.027 に答える
1

dataタイプは ですunsigned char*が、 がgdk_bitmap_create_from期待されconst char*ます。 reinterpret_cast符号の不一致を扱っています。

于 2011-07-22T00:21:30.047 に答える