我遇到了一个我无法理解的问题 我想直接在我的C代码中“包含”一系列图标。使用工具gdk-pixbuf-csource(带--struct选项)我生成了一个文件,为每个图像初始化一个'const'pixdata结构。 编码图像的例子如下:
const GdkPixdata pixdata_flipH = {
0x47646b50, /* Pixbuf magic: 'GdkP' */
24 + 479, /* header length + pixel_data length */
0x2010002, /* pixdata_type */
64, /* rowstride */
16, /* width */
16, /* height */
/* pixel_data: */
"\257\0\0\0\0\1\0\0\0\1\203\0\0\0\0\2\0\0\0\2\40J\207E\202\40J\207\377"
"\202\0\0\0\0\202\40J\207\377\2\40J\207E\40J\207\2\202\0\0\0\0\1\0\0\0"
"\2\203\0\0\0\0\4\40J\2072\40J\207\377\276\322\352\377\40J\207\377\202"
<data continues......>
"\0\0\0\0\1\40J\207\1\204\0\0\0\0\1\40J\207\3\227\0\0\0\0\1\0\0\0\3\244"
};
我想在某些按钮中包含图标,因此我准备了以下一系列声明:
GtkWidget *icon_flipH = gtk_image_new_from_pixbuf(gdk_pixbuf_from_pixdata(&pixdata_flipH, FALSE, NULL));
GtkWidget *icon_flipV = gtk_image_new_from_pixbuf(gdk_pixbuf_from_pixdata(&pixdata_flipV, FALSE, NULL));
// and so on...
通过这种方式,我将使用以下功能将图像添加到按钮:
gtk_button_set_image(GTK_BUTTON(button_flipH), icon_flipH);
嗯......在包含gdk_pixbuf_from_pixdata()函数的每一行中,GCC编译器错误地说“初始化元素不是常量”。我无法弄清楚为什么,因为函数需要一个const结构指针,实际上我的结构被声明为'const'。
我忘记了什么吗?是不是将图像包含在代码中并创建pixbuf的正确方法?在这种情况下的任何教程?
答案 0 :(得分:2)
在文件范围定义的对象(如icon_flipH
)具有静态存储持续时间:它们的生命周期是程序的生命周期,它们在程序启动之前初始化。您只能使用常量表达式(例如0
,10 + 32
或sizeof (int)
)初始化具有静态存储持续时间的对象。函数调用的结果不是常量表达式。
// File scope
GtkWidget *icon_flipH = NULL; // OK, NULL is a constant expression
GtkWidget *icon_flipV = foo(); // Not OK, foo is not a constant expression