尝试使用wxWidgets-2.9.1
使用c++0x
标记从源代码编译gcc-4.6
。我遇到了一个错误
narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive]
在文件src/gtk/dcclient.cpp
中。错误来自以下文件:
这是一个已知的错误。 http://trac.wxwidgets.org/ticket/12575 所以我按要求做了,程序正在编译好。
基本上,diff
文件有两种修复方式
//在文件 dcclient.h
中hatches [i] = gdk_bitmap_create_from_data(NULL, bdiag_bits ,bdiag_width,bdiag_height); hatches [i] = gdk_bitmap_create_from_data(NULL, reinterpret_cast< const char *>(bdiag_bits),bdiag_width,bdiag_height);
//文件 bdiag.xbm 以及所有* .xbm文件中的类似修复程序
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,0x20,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);
gdk_bitmap_create_from_data
虽然稍后在同一个文件 dcclient.cpp 中输入几行,但以下对char* data = new char[data_size];
//...
GdkPixmap* pixmap = gdk_bitmap_create_from_data(mask, data, dst_w, dst_h);
的调用不会产生任何错误。
static unsigned char*
现在这里不需要进行类型转换。为什么我们需要在{{1}}上进行reinterpret_cast?
答案 0 :(得分:1)
unsigned char
,signed char
和char
(也称为“普通字符”)有三种不同的类型。 unsigned char*
和char*
之间没有转化。
答案 1 :(得分:1)
data
的类型为unsigned char*
,但gdk_bitmap_create_from
需要const char*
。 reinterpret_cast
正在处理签名不匹配问题。