错误:将'const QByteArray'作为'QByteArray&的'this'参数传递QByteArray :: append(const QByteArray&)'丢弃限定符[-fpermissive]
因为作为函数参数传递时使对象成为常规我已经完成了它。 但现在我收到了错误!!, 我想让函数保持不变,因为我必须将qbyte数组中的数据转换为short,然后将其附加到另一个数组。
QByteArray ba((const char*)m_output.data(), sizeof(ushort));
playbackBuffer.append(ba);
我真的需要将此数组传递给playbackbuffer
;
它在playbackBuffer.append(ba)
;
请帮助
提前谢谢
答案 0 :(得分:11)
这意味着您在const成员上调用非const成员函数。据推测,您的append
函数会修改字节数组。使用const引用,您不应该修改。
答案 1 :(得分:2)
基本上它说的是你试图附加到一个常量数组。
如果“append”没有改变对象本身但只返回附加的两个数组,the method needs to be declared const to allow the call.
答案 2 :(得分:2)
考虑一下:
struct foo
{
void bar();
};
const foo f;
f.bar();
此处,在对bar()
的调用中,this
指针为&f
。但bar()
不是const函数,因此this
的类型为foo*
,与const foo*
不兼容。 (换句话说,bar()
表示它可能会改变foo
,但f
表示它是不可变的foo
。)
bar()
需要标记为const
(如果可以),或f
不需要const
。
在你的情况下,我将假设你正在使用Qt,所以不能修改QByteArray
(也不应该,因为append
必然是非const函数),而是建议你摆脱了对象上的const
,这阻止你使用该函数。
答案 3 :(得分:0)
所以你试图在const对象上调用非const函数? 这就是将const xxx作为'this'参数传递意味着什么。 因为最终任何成员函数都是 (Class * this,其余论点)
答案 4 :(得分:0)
要么
QByteArray& QByteArray::append(const QByteArray&);
是
QByteArray& QByteArray::append(const QByteArray&) const;
(极不可能解决任何问题)或只是
QByteArray* pObj = const_cast<QByteArray*>(&your_obj)
if (pObj)
pObj->append(...