【问题标题】:error: ‘parent_window’ undeclared错误:“parent_window”未声明
【发布时间】:2014-06-16 17:39:43
【问题描述】:

我在用 C 语言编译程序时遇到问题。我想使用以下代码运行简单的文件选择器:

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *dialog;

  gtk_init(&argc, &argv);

  dialog = gtk_file_chooser_dialog_new ("Open File",parent_window,action,_("_Cancel"),GTK_RESPONSE_CANCEL,_("_Open"),GTK_RESPONSE_ACCEPT,NULL);                   

 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
  {
    char *filename;
    GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
    filename = gtk_file_chooser_get_filename (chooser);
    open_file (filename);
    g_free (filename);
  }

  gtk_widget_destroy (dialog);

  gtk_main();

  return 0;
}

我使用该命令编译它:

gcc -o s5 s5.c `pkg-config --libs --cflags gtk+-3.0`

我得到了那个错误:

s5.c:10:39: error: ‘parent_window’ undeclared (first use in this function)
                                       parent_window,
                                       ^
s5.c:10:39: note: each undeclared identifier is reported only once for each function it appears in
s5.c:11:39: error: ‘action’ undeclared (first use in this function)
                                       action,
                                       ^
s5.c:16:39: warning: passing argument 4 of ‘gtk_file_chooser_dialog_new’ makes pointer from integer without a cast [enabled by default]
                                       NULL);
                                       ^
In file included from /usr/include/gtk-3.0/gtk/gtk.h:99:0,
                 from s5.c:1:
/usr/include/gtk-3.0/gtk/gtkfilechooserdialog.h:63:12: note: expected ‘const gchar *’ but argument is of type ‘int’
 GtkWidget *gtk_file_chooser_dialog_new              (const gchar          *title,
            ^

我尝试对 GTK+ 2 做同样的事情,但也遇到了同样的错误;/

【问题讨论】:

  • 您的代码示例中在哪里声明了parent_window
  • 就此而言,action 是在哪里声明的?
  • (有修辞,顺便说一句......我只是重新告诉你编译器已经告诉你的内容。)这两个问题的答案都是没有声明任何变量......这是为什么编译器会抱怨,以及为什么您会看到其中一些错误。
  • 修复了问题。程序需要 2 个方法时出现问题。
  • 您可以发布您的固定代码作为新答案吗?

标签: c gtk gtk3


【解决方案1】:

对于这些想要从 gtk+ 示例运行文件选择的人来说,这是答案:

#include <gtk/gtk.h>

int main( int argc, char *argv[]){

    //dialog variable
    GtkWidget *dialog;    

    gtk_init(&argc, &argv);

    //Define dialog
    dialog = gtk_file_chooser_dialog_new ("Open File",NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL);

    //If file was choosen                 
    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT){
        char *filename;
        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));   
        printf("Selected file: %s\n", filename);
    } else {
        gtk_widget_destroy (dialog);
        return 0;
    }


    gtk_main();  
}

要编译,您需要使用该命令:

gcc -o s6 s6.c `pkg-config --libs --cflags gtk+-2.0`

【讨论】:

    【解决方案2】:

    问题是一些变量未声明;您一定是从某个示例中复制并粘贴了代码而忘记定义它们。要制作一个非常简单的 GTK 对话框示例,请尝试以下操作:

    #include <gtk/gtk.h>
    
    int main(int argc, char *argv[])
    {
        GtkWidget *dialog;
    
        gtk_init(&argc, &argv);
    
        dialog = gtk_file_chooser_dialog_new("Open File",
                NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
                "_Cancel", GTK_RESPONSE_CANCEL,
                "_Open", GTK_RESPONSE_ACCEPT,
                NULL);
    
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
            char *filename;
            GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog);
            filename = gtk_file_chooser_get_filename(chooser);
            g_message("File selected: %s", filename);
            g_free(filename);
        }
    
        gtk_widget_destroy (dialog);
    
        gtk_main();
        return 0;
    }
    

    并按照您的建议进行编译:

    gcc -o s5 s5.c `pkg-config --libs --cflags gtk+-3.0`
    

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多