首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ GeoClue g_object_unref:断言“G_IS_OBJECT(对象)”失败

C++ GeoClue g_object_unref:断言“G_IS_OBJECT(对象)”失败
EN

Stack Overflow用户
提问于 2020-08-14 20:35:26
回答 1查看 1.2K关注 0票数 0

因此,我最近尝试为我的一个Raspberry项目尝试GeoClue,但我仍然坚持使用gclue-simple()。运行gclue_simple_new似乎很好,但是当我试图用gclue_simple_new_finish()获取指针时,程序会给出一个运行时错误:

代码语言:javascript
复制
(process:37607): GLib-GIO-CRITICAL **: 16:26:33.873: g_async_result_get_source_object: assertion 'G_IS_ASYNC_RESULT (res)' failed

(process:37607): GLib-GIO-CRITICAL **: 16:26:33.873: g_async_initable_init_finish: assertion 'G_IS_ASYNC_INITABLE (initable)' failed

(process:37607): GLib-GObject-CRITICAL **: 16:26:33.873: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

该程序的代码如下:

代码语言:javascript
复制
#include <cstdlib>
#include <iostream>

#include <gclue-simple.h>

void geoclue_callback (GObject* srcObj, GAsyncResult* result, void* userData); 

int main(){
    std::cout << "Program started." << std::endl; 
    
    const char* DESKTOP_ID = "desktop1"; 
    GClueAccuracyLevel accuracy = GCLUE_ACCURACY_LEVEL_CITY; 
    GCancellable* cancellablePtr = NULL; 
    GAsyncReadyCallback callback = geoclue_callback; 
    //gpointer is like void pointer. 
    gpointer usrDataPtr; 

    std::cout << "Variables declared." << std::endl; 

    gclue_simple_new(
        DESKTOP_ID, 
        accuracy, 
        cancellablePtr, 
        callback, 
        usrDataPtr
    ); 

    std::cout << "geoclue service started." << std::endl; 

    GClueSimple* gclueServicePtr; 
    GAsyncResult* rstPtr; 
    GError** errsPtr; 
    //This part here causes runtime error. 
    gclueServicePtr = gclue_simple_new_finish(rstPtr, errsPtr); 

}

void geoclue_callback (GObject* srcObj, GAsyncResult* result, void* userData) { 
    //Callback function for when Geoclue comes up with something
    std::cout << "Results Ready." << std::endl; 
}

我只是进入地理线索,我以前没有任何与gtk或GNOME项目相关的经验,所以我可能遗漏了一些显而易见的东西。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 23:05:40

callback不是告诉您某些结果已经准备好,而是告诉您已经创建了GClueSimple*对象。您需要从gclue_simple_new_finish()内部调用callback,而不是在此之前。您需要将GAsyncResult *result传递给它,再加上指向GError *error = NULL初始化错误的指针。

如果初始化失败,gclue_simple_new_finish()可能返回NULL (以及您给它的错误指针中的GError对象)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63419695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档