微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回 void 的指针在 C 中工作但在 C++ 中无效

如何解决返回 void 的指针在 C 中工作但在 C++ 中无效

我正在尝试为 Tizen 平台制作本机 C/C++ 应用程序,这是 Tizen Studio 提供的模板代码的一部分: (注意这是C代码

static char*
gl_text_get(void *data,Evas_Object *obj,const char *part)
{
    char buf[1024];
    item_data *id = data;
    int index = id->index;

    if (index == 0)
        snprintf(buf,1023,"%s","Email InBox");
    else if (index == 1)
        snprintf(buf,"circle@tizen.com");
    else if (!strcmp(part,"elm.text"))
        snprintf(buf,genlist_demo_names[index - 2]);
    else if (!strcmp(part,"elm.text.1"))
        snprintf(buf,"Re: Long time no see");
    else
        snprintf(buf,"Hello~! how have you been?");

    return strdup(buf);
}

static void
gl_del(void *data,Evas_Object *obj)
{
    item_data *id = data;
    if (id) free(id);
}

static void
gl_selected_cb(void *data,void *event_info)
{
    Evas_Object *label;
    Elm_Object_Item *it = event_info;
    appdata_s *ad = data;
    elm_genlist_item_selected_set(it,EINA_FALSE);

    label = create_label(ad,it);
    //View changed to text detail view.
    elm_naviframe_item_push(ad->nf,elm_object_item_part_text_get(it,"elm.text"),NULL,label,NULL);

    return;
}

此模板成功编译并在我的 Tizen 设备上运行。但是,当我在 C++ 文件中复制相同的代码时(因为我的项目中需要一些仅限 cpp 的功能)。编译失败:

这对我来说似乎很明显,因为指针无法获取 void 的值。那么为什么这在 C 代码中有效? void 在 C 和 C++ 中的含义相同吗?

解决方法

在 C 和 C++ 中,任何指针类型都可以隐式转换为 void*

但仅在 C 中,void* 可隐式转换为任何其他指针类型,而在 C++ 中并非如此,您需要显式类型转换,例如:

Elm_Object_Item *it = (Elm_Object_Item *) event_info;
appdata_s *ad = (appdata_s *) data;
item_data *id = (item_data *) calloc(sizeof(item_data),1);

或者,更优选地,使用 static_cast 而不是 C-style cast

Elm_Object_Item *it = static_cast<Elm_Object_Item*>(event_info);
appdata_s *ad = static_cast<appdata_s*>(data);
item_data *id = static_cast<item_data*>(calloc(sizeof(item_data),1));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?