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

compiling wxWidgets with c++0x flags

本文关键字:wxWidgets 编译 标志 c++0x 使用      更新时间:2023-10-16

尝试使用gcc-4.6从具有c++0x标志的源代码编译wxWidgets-2.9.1时。我遇到一个错误

narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive]在文件CCD_ 5中。错误来自以下文件:

  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. hatch[i]=gdk_bitmat_create_from_data(NULL,bdiag_bits,bdiag_width,bdiag_height(;shatchs[i]=gdk_bitmat_create_from_data(NULL,relpret_cast<const char*>(bdiag_bits(,bdiag_width,bdiag_height(;

    //在文件bdiag.xbm中,并在所有*.xbm文件中进行类似修复

  2. staticcharbdiag_bits[]={

    staticunsigned charbdiag_bits〔〕={0x80、0x80、0x40、0x40、0x20、0x20,0x10、0x10、0x08、0x08,0x04,0x02、0x02、0x001、0x01、0x80、0x80,0x40、0x40、0x20、0x20、0x10、0x10,0x08,0x08,0x04,0x02,0x02,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中的几行之后,对gdk_bitmap_create_from_data的以下调用没有给出任何错误。

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

现在这里不需要打字。为什么我们需要对static unsigned char*进行重新解释测试?

unsigned charsigned charchar(也称为"普通字符"(是三种不同的类型。unsigned char*char*之间没有转换。

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