程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了返回 void 的指针在 C 中工作但在 C++ 中无效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到返回 void 的指针在 C 中工作但在 C++ 中无效的问题如何解决?下面主要结合日常开发的经验,给出你关于返回 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,@R_696_6633@

    return;
}

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

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

这对我来说似乎很明显,因为指针无法获取 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));

大佬总结

以上是大佬教程为你收集整理的返回 void 的指针在 C 中工作但在 C++ 中无效全部内容,希望文章能够帮你解决返回 void 的指针在 C 中工作但在 C++ 中无效所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。