尝试wxWidgets-2.9.1
从带有c++0x
标志的源代码编译时使用gcc-4.6
. 我遇到了一个错误
narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive]
在文件中src/gtk/dcclient.cpp
。错误来自以下文件:
- src/gtk/bdiag.xbm
- src/gtk/cdiag.xbm
- src/gtk/fdiag.xbm
- src/gtk/horiz.xbm
- src/gtk/verti.xbm
- src/gtk/cross.xbm
这是一个已知的错误。 http://trac.wxwidgets.org/ticket/12575 所以我按要求做了,程序编译好了。
diff
基本上,该文件有两种修复
//在文件dcclient.h中
阴影[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 文件中的类似修复
静态字符bdiag_bits[] = {
静态无符号字符bdiag_bits[] = { 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x80, 0x80, 0x04 0x20、0x10、0x10、0x08、0x08、0x04、0x04、0x02、0x02、0x01、0x01};
我理解第二个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中的几行之后,对 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 on static unsigned char*
?