При попытке скомпилировать wxWidgets-2.9.1
из исходного кода с c++0x
флагами с использованием gcc-4.6
. Я обнаружил ошибку
narrowing conversion of '128' from 'int' to 'char' inside { } [-fpermissive]
в файле src/gtk/dcclient.cpp
. Ошибка возникает из следующих файлов:
- src / gtk / bdiag.xbm
- src / gtk / cdiag.xbm
- src / gtk / fdiag.xbm
- src / gtk / horizon.xbm
- SRC / GTK / verti.xbm
- SRC / 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 ‹const char *> (bdiag_bits), bdiag_width, bdiag_height);
// в файле bdiag.xbm и аналогичные исправления во всех файлах * .xbm
static char 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);
Теперь здесь не требуется приведения типов. Почему нам нужно сделать новую интерпретацию static unsigned char*
?