При попытке скомпилировать wxWidgets-2.9.1
из источника с флагами c++0x
, используя gcc-4.6
. Я наткнулся на ошибку
narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive]
в файле src/gtk/dcclient.cpp
. Ошибка исходит из следующих файлов:
- ЦСИ / GTK / bdiag.xbm
- ЦСИ / GTK / cdiag.xbm
- SRC / GTK / fdiag.xbm
- SRC / GTK / horiz.xbm
- ЦСИ / GTK / verti.xbm
- ЦСИ / GTK / cross.xbm
Это известная ошибка.
http://trac.wxwidgets.org/ticket/12575
Итак, я сделал так, как нужно, и программа компилируется нормально.
Как правило, в diff
есть два вида исправлений
// в файле dcclient.h
штриховки [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
статический символ 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*
?