使用c ++ 0x标志编译wxWidgets

时间:2011-07-22 00:10:24

标签: c++ wxwidgets reinterpret-cast

尝试使用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
  7. 这是一个已知的错误。 http://trac.wxwidgets.org/ticket/12575 所以我按要求做了,程序正在编译好。

    基本上,diff文件有两种修复方式

    //在文件 dcclient.h

    1. 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文件中的类似修复程序

    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,0x20,0x20,0x10,0x10, 0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x01};

    3. 我理解第二个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?

2 个答案:

答案 0 :(得分:1)

unsigned charsigned charchar(也称为“普通字符”)有三种不同的类型。 unsigned char*char*之间没有转化。

答案 1 :(得分:1)

data的类型为unsigned char*,但gdk_bitmap_create_from需要const char*reinterpret_cast正在处理签名不匹配问题。