LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 731|回复: 3

程序编译通过了,但运行的时候出错了,是什么原因?

[复制链接]
发表于 2005-3-27 23:29:45 | 显示全部楼层 |阅读模式
对着书本上的输的,编译通过了,运行的时候出现这样的提示:
/etc/gtk-2.0/gtkrc:6: error: invalid string constant "default", expected valid string constant
Segmentation fault


附程序:
#include <gtk/gtk.h>

void
on_button_clicked (GtkWidget *button,gpointer data)
{
        g_print("按钮 %s",(gchar*)data);       
//g_print("Button %s is pressed.\n",(gchar*)data);
}

GtkWidget* create_button1(void)
{
        GtkWidget* box;
        GtkWidget* image;
        GtkWidget* label;
        GtkWidget* button;
        char* title="红苹果";
        image=gtk_image_new_from_file("apple-red.png");
        label=gtk_label_new(title);
        box =gtk_vbox_new(FALSE,2);
        gtk_container_set_border_width(GTK_CONTAINER(box),5);
        gtk_box_pack_start(GTK_BOX(box),image,FALSE,FALSE,3);
        gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,3);
        gtk_widget_show(image);
        gtk_widget_show(label);
        button=gtk_button_new();
        gtk_container_add(GTK_CONTAINER(button),box);
        gtk_widget_show(box);
        return button;
}

GtkWidget* create_button2(void)
{
        GtkWidget* box;
        GtkWidget* image;
        GtkWidget* label;
        GtkWidget* button;
        char* title="小蘑菇";
        image=gtk_image_new_from_file("gnome-gmush.png");
        label=gtk_label_new(title);
        box =gtk_vbox_new(FALSE,2);
        gtk_container_set_border_width(GTK_CONTAINER(box),5);
        gtk_box_pack_start(GTK_BOX(box),image,FALSE,FALSE,3);
        gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,3);
        gtk_widget_show(image);
        gtk_widget_show(label);
        button=gtk_button_new();
        gtk_container_add(GTK_CONTAINER(button),box);
        gtk_widget_show(box);
        return button;
}

int main(int argc,char* argv[])
{
        GtkWidget* window;
        GtkWidget* box;
        GtkWidget* button1;
        GtkWidget* button2;
        GtkWidget* button3;
        GtkWidget* button4;
        gchar* title ="带图像和快捷键的按钮";
        gchar* b1="Red apple";
        gchar* b2="Small mushroom";
        gchar* b3="Short key";
        gchar* b4="Ok";
        gtk_init(&argc,&argv);
        window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window),title);
        gtk_container_set_border_width(GTK_CONTAINER(window),20);
        g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
        box=gtk_hbox_new(FALSE,0);
        gtk_container_add(GTK_CONTAINER(window),box);
        button1=create_button1();
        g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b1);
        gtk_box_pack_start(GTK_BOX(box),button1,FALSE,FALSE,5);
        button1=create_button2();
        g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b2);
        gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,5);
        button3=gtk_button_new_with_mnemonic("快捷键(_H)");
        g_signal_connect(G_OBJECT(button3),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b3);
        gtk_box_pack_start(GTK_BOX(box),button3,FALSE,FALSE,5);
        button4=gtk_button_new_from_stock(GTK_STOCK_OK);
        g_signal_connect(G_OBJECT(button4),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b4);
        gtk_box_pack_start(GTK_BOX(box),button4,FALSE,FALSE,5);
        gtk_widget_show_all(window);
        gtk_main();
        return FALSE;
}
发表于 2005-3-28 15:24:18 | 显示全部楼层
/etc/gtk-2.0/gtkrc的第6行是不是有什么问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-28 20:20:24 | 显示全部楼层
/etc/gtk-2.0/gtkrc文件如下:
style "user-font"
{
font_name="Tahoma,Simsun 9"
}

widget_class "*" style "default"

这个default有什么问题吗?
回复 支持 反对

使用道具 举报

发表于 2005-3-28 20:20:42 | 显示全部楼层

  1. ...
  2. button1=create_button1();
  3. g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b1);
  4. gtk_box_pack_start(GTK_BOX(box),button1,FALSE,FALSE,5);
  5. button1=create_button2();
  6. g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b2);
  7. gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,5);
  8. ...
复制代码

你是存心来考我们眼力是不是?
以上几行你看有什么错?
实际上button2更本没有被创建,你就去用了。不错才怪呢。
这样就可以了。

  1. ...
  2. button1=create_button1();
  3. g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b1);
  4. gtk_box_pack_start(GTK_BOX(box),button1,FALSE,FALSE,5);
  5. button2=create_button2();
  6. g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(on_button_clicked),(gpointer)b2);
  7. gtk_box_pack_start(GTK_BOX(box),button2,FALSE,FALSE,5);
  8. ...
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表