为什么不增加?

布鲁诺

所以我试图做一个函数,它接受 a GTree*(每个节点Tree都是 a struct User)和 an id,它会搜索那个user并增加一个变量!(学校项目)

有了这里的一些帮助,我设法做到了,但我没有意识到它没有增加。

结构是:

typedef struct user {
    int id;
    char username[256]; 
    int post_count; 
    char short_bio[16384]; 
    int reputation;
}*USER;

typedef struct TCD_community{
    GTree* res;    
    GTree* quest; 
    GTree* users; /
}TCD_community;

typedef struct TCD_community * TAD_community;

TAD_community tq;

功能是(由 stackoverflow 用户帮助):

void incrementaPost(GTree* a,int id){

    gpointer ptr = g_tree_lookup ( a , &id);   

    struct user *u = (struct user *) ptr; 

    if(u){
        u->post_count++;  
    }
}

我在 main 上这样称呼它:

incrementaPost( tq -> users, 703994);

输出:

Id 703994 
Name N.Sinha 
post_count 0 
reputation 51

预期的:

Id 703994 
Name N.Sinha 
post_count 1 
reputation 51
SG7

请注意,GTree*在进行搜索之前必须正确构建 。

首先使用专用搜索功能构造树:

GTree   *tree;
tree = g_tree_new(MySearchFunction);

在哪里

g_tree_new ()

GTree * g_tree_new (GCompareFunc key_compare_func);

创建一个新的GTree.

参数:

key_compare_func

用于对 中的节点进行排序的函数GTree它应该返回类似于标准strcmp()函数的——0如果两个参数相等,如果第一个参数在第二个之前,则返回负值,如果第一个参数在第二个参数之后,则返回正值。

然后你的对象必须插入使用 g_tree_insert ()

g_tree_insert ()

void g_tree_insert (GTree *tree, gpointer key, gpointer value);

将键/值对插入到GTree.

如果给定的键已存在GTree于其对应的值中,则将其设置为新值。如果您在创建 时提供了 value_destroy_func GTree,则使用该函数释放旧值。如果您在创建 时提供了 key_destroy_func GTree,则使用该函数释放传递的密钥。

参数

tree

  • 一种 GTree

key

  • 要插入的键

value

  • 键对应的值

只有这样,您才能g_tree_lookup用于搜索。

检查这个简单的例子- 如何构造GTree*、插入元素、通过 进行搜索g_tree_lookup和遍历树g_tree_traverse

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章