c - 在迭代 bson 时访问 value.type

c - accessing value.type when iterating bson

我正在尝试遵循 libbson API 文档。但我好像弄错了什么。 documentation 声明您可以执行以下操作:

const bson_value_t *value;

value = bson_iter_value (&iter);

if (value.type == BSON_TYPE_INT32) {
   printf ("%d\n", value.value.v_int32);
}

但是当我尝试用它编译实际代码时,出现以下错误:

example1.c:34:64: error: request for member ‘type’ in something not a structure or union

这里是实际代码:

#include <bson.h>
#include <mongoc.h>
#include <stdio.h>


int
main (int   argc,
              char *argv[])
{
    mongoc_client_t *client;
    mongoc_collection_t *collection;
    mongoc_cursor_t *cursor;
    const bson_t *doc;
    const bson_value_t *value;
    bson_t *query;
    char *str;
    bson_iter_t iter;
    bson_type_t type;
    mongoc_init ();

    client = mongoc_client_new ("mongodb://localhost:27017/");
    collection = mongoc_client_get_collection (client, "test", "test");
    query = bson_new ();
    cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);

    while (mongoc_cursor_next (cursor, &doc)) {
            str = bson_as_json (doc, NULL);
            if (bson_iter_init (&iter, doc)) {
               while (bson_iter_next (&iter)) {
                     printf ("Found element key: \"%s\"\n", bson_iter_key (&iter));
                        type = bson_iter_type (&iter);
                        printf("type %d\n", (int)type);
                        value = bson_iter_value (&iter);
                        printf("Found values of type %d", value.type);
                     }
            }
            bson_free(str);
        }

    bson_destroy (query);
    mongoc_cursor_destroy (cursor);
    mongoc_collection_destroy (collection);
    mongoc_client_destroy (client);

    return 0;
}

value 是一个指针。您需要取消引用它:

value->type

(*value).type

除此之外,根据the documentationbson_value_t没有叫type的成员。也许他们的意思是

value->value_type