-1

ここに画像の説明を入力ステーションのリストがプリセット ロール リストに印刷され、リストの最初または最後にいる場合、多くの空の項目が表示されます。約20局のリストを作成して表示してみると、リストの最初と最後に移動します。問題は次のコードにあると思います。

static void add_button_clicked_cb(GtkWidget *widget, gpointer data)
{
    preset *ps;
    gchar *buffer;
    GtkTreeIter iter = {0};
    GtkAdjustment* v_scb;
    GtkTreePath *path = NULL;
    GList* menuitems;
    GtkWidget *menuitem;

    ps = malloc(sizeof(preset));
    ps->title = g_strdup(_("unnamed"));
    ps->freq = rint(gtk_adjustment_get_value(adj)) / STEPS;
    settings.presets = g_list_append(settings.presets, (gpointer) ps);
    buffer = g_strdup_printf("%.2f", ps->freq);

    gtk_list_store_append(list_store, &iter);
    gtk_list_store_set(list_store, &iter, 0, ps->title, 1, buffer, -1);

    g_free(buffer);
    gtk_tree_selection_unselect_all(selection);

    v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
    gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));

    if (main_visible) {
        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
        mom_ps = g_list_length(settings.presets) - 1;
        preset_combo_set_item(mom_ps);

        menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
        menuitem = gtk_menu_item_new_with_label(ps->title); 

        gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);     
        g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, (gpointer)mom_ps);
        gtk_widget_show(menuitem);
    }

    buffer = g_strdup_printf("%d", g_list_length(settings.presets) - 1);
    path = gtk_tree_path_new_from_string(buffer);
    g_free(buffer);
    gtk_tree_view_set_cursor(GTK_TREE_VIEW(list_view), path, NULL, FALSE);
    gtk_tree_path_free(path);
}

どうすれば修正できるか教えてください。

4

2 に答える 2

5

の内部にはif (main_visible)、次のものがあります。

menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));

つまり、menuitemsその関数呼び出しの戻り値に の値を設定しています。ただし、コードの残りの部分は、実際には menuitem を処理しません。したがって、コンパイラはその警告を出します。

これを修正するのは、単にメニュー項目を取り除くのと同じくらい簡単かもしれません:

gtk_container_get_children(GTK_CONTAINER(tray_menu));

それは間違いなく警告を取り除くでしょう。しかし、あなたはそれについて考える必要があります: おそらく、その関数呼び出しの戻り値で何かをするべきであり、それを使って何もしていない理由は、(または何でも) するのを忘れたからです。

于 2012-04-21T04:44:45.157 に答える
1

警告: 変数 'menuitems' が設定されていますが、使用されていません

素人の言葉であなたのコンパイラは次のように言っています:

おい...いくつかの属性を持つクラスを作成しました。そのうちの1つは「メニュー項目」と呼ばれます。それはすべてうまくいきますが、実際にインスタンスを作成してすべての変数を割り当てると、「menuitems」を設定しますが、その変数を使用して何かを行うことはありません。そこに座っているだけで何もしません。私はまだあなたのプログラムを実行できるのでまったく問題ありませんが、変数自体を使用していないため、「menuitems」変数が* * 実行していることを警告するだけです。兄弟に警告するだけです:Dそれ以外は良い一日を

したがって、値をそこに格納する以外の特定の理由で変数が使用されていないことを知らせる警告にすぎませんが、何か有用なことを行うために変数にアクセスすることはありません。したがって、実際には何もしていないのでコメントアウトするか、使用するか、警告を読んで楽しんでください。ただし、プログラムの実行方法には影響しません。

警告は主に、開発者が自分のコードと何が起こっているかをより認識できるようにするために表示されます。

于 2012-04-21T04:51:56.357 に答える