我有两个程序通过 D-Bus 进行通信。其中一个函数接受两个参数,即 const char* data
和 int size
,在另一个函数中,我有一个返回类型值的函数 无符号字符
。我在第一个程序中放置了一个函数调用,如 function((char*)program2->function().value(), 1)
但我收到警告 cast to pointer from integer不同大小的 [-Wint-to-pointer-cast]。我应该如何解决这个警告?我也在使用 Qt 库。
编辑:
实际上在采用const char*
和int
的函数中,我将数据附加到接受const char 的
和 Qt 提供的构造函数中类型 QByteArray
*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
所以请停止添加不相关的标签,如 QByteArray
或 QtCore
等
最佳答案
你需要的是数据的地址......看起来像
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/