1

尝试wxWidgets-2.9.1从带有c++0x标志的源代码编译时使用gcc-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基本上,该文件有两种修复

//在文件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. 静态字符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*

4

2 回答 2

1

unsigned char,signed charchar(也称为“普通字符”)是三种不同的类型。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 回答