компиляция wxWidgets с флагами c ++ 0x - PullRequest
1 голос
/ 22 июля 2011

При попытке скомпилировать wxWidgets-2.9.1 из источника с флагами c++0x, используя gcc-4.6. Я наткнулся на ошибку

narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive] в файле src/gtk/dcclient.cpp. Ошибка исходит из следующих файлов:

  1. ЦСИ / GTK / bdiag.xbm
  2. ЦСИ / GTK / cdiag.xbm
  3. SRC / GTK / fdiag.xbm
  4. SRC / GTK / horiz.xbm
  5. ЦСИ / GTK / verti.xbm
  6. ЦСИ / 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 (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, 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);

, а несколькими строками позже в том же файле 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 на static unsigned char*?

Ответы [ 2 ]

1 голос
/ 22 июля 2011

data имеет тип unsigned char*, но gdk_bitmap_create_from ожидает const char*.reinterpret_cast имеет дело с несоответствием подписи.

1 голос
/ 22 июля 2011

unsigned char, signed char и char (также известные как «обычный символ») - это три различных типа.Там нет преобразования между unsigned char* и char*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...