c++ - 如何解决此 "cast to pointer from type of different size"警告?

标签 c++ qt casting reference qdbus

我有两个程序通过 D-Bus 进行通信。其中一个函数接受两个参数,即 const char* dataint size,在另一个函数中,我有一个返回类型值的函数 无符号字符。我在第一个程序中放置了一个函数调用,如 function((char*)program2->function().value(), 1) 但我收到警告 cast to pointer from integer不同大小的 [-Wint-to-pointer-cast]。我应该如何解决这个警告?我也在使用 Qt 库。

编辑:

实际上在采用const char*int 的函数中,我将数据附加到接受const char 的QByteArray * 和 Qt 提供的构造函数中类型 int 的大小,另一个程序应该返回 0-255 范围内的数字,因此 unsinged char。如果我的做法是错误的,获得预期结果的最佳方法是什么?

同时调用 program2-> 函数调用以下内容:

inline QDBusPendingReply<uchar> type()
    {
        QList<QVariant> argumentList;
        return asyncCallWithArgumentList(QLatin1String("type"), argumentList);
    }

这个类有一个名为 value() 的函数,它调用:

inline typename Select<0>::Type value() const
    {
        return argumentAt<0>();
    }

注意:我提出这个问题的主要目的是找到一种方法来创建对调用代理类中定义的函数的返回结果的引用,而不是如何将其转换为可接受的内容创建一个 QByteArray 所以请停止添加不相关的标签,如 QByteArrayQtCore

最佳答案

你需要的是数据的地址......看起来像

function2(& program2->function().value(), 1);

并且非常安全,因为临时变量的生命周期一直到完整表达式的末尾,对于 function2 来说足够长1 来使用它。

不幸的是,您不能在右值上使用 & address-of 运算符。但是有一个解决方法,因为您可以将 const 左值引用绑定(bind)到右值,并且无论如何您都需要一个指向 const 数据的指针:

template<T>
const T* get_addr(const T& v) { return &v; }

function2( get_addr(program2->function().value()), 1 );

如果你得到有符号与无符号的不匹配,试试

function2( get_addr<char>(program2->function().value()), 1 );

当然,为了避免给变量起一个名字,这需要做很多工作,如Captain Obvlious has done。 .


1 除非 function2 保存该指针供以后使用,但如果保存了,那么您也不应该使用局部变量来保存该值,但要付出非常接近的代价注意对象的生命周期。

关于c++ - 如何解决此 "cast to pointer from type of different size"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418058/

相关文章:

C++ - 将对象(如字符串)映射到表中的成员函数的正确方法

C++风格: Stroustrup' s placement of pointer asterisks

c++ - 如何为指向外部存储器的奇特指针实现 operator-> ?

Java Gson 在 HashMap 中序列化和反序列化对象(key,Object)

c# - 实例化泛型类型时出现 InvalidCastException

android - Boost Log V2 库 Android 链接

Qt5、声子和多媒体套件

c++ - posix信号 react 时间

c++ - 如何使 QComboBox 的文本加粗,而不是列表项?

sql-server - SQL Server 2005 中的平均时间值