C++将一个const对象引用传递给一个函数
error: passing 'const QByteArray' as 'this' argument of 'QByteArray& QByteArray::append(const QByteArray&)' discards qualifiers [-fpermissive]C++将一个const对象引用传递给一个函数
因为它是一个约定,使作为函数参数传递的对象,而我已经做了它。 但现在我得到一个错误!!, 我天玑想使功能不变,因为我有在qbyte阵列中的数据转换成短,然后其追加另一个数组。
QByteArray ba((const char*)m_output.data(), sizeof(ushort));
playbackBuffer.append(ba);
我真的需要通过这个数组playbackbuffer
;
这是给我的playbackBuffer.append(ba)
错误;
请帮助
在此先感谢
所以,你试图调用一个const对象的非const函数? 这就是传递const xxx作为'this'参数意味着什么。 因为最终任何成员函数真的是 (类* this,其余的参数)
基本上它说的是,你试图追加到一个常量数组。
如果 “追加” 不会改变物体本身只是返回两个数组追加,the method needs to be declared const to allow the call.
感谢回复 – ken 2012-02-17 12:15:09
要么让你
QByteArray& QByteArray::append(const QByteArray&);
被
QByteArray& QByteArray::append(const QByteArray&) const;
(极不可能解决任何东西)或者只是
QByteArray* pObj = const_cast<QByteArray*>(&your_obj)
if (pObj)
pObj->append(...
考虑一下:
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
的该对象阻止您使用该函数。
你ATLEAST不得不发布一些代码,使错误的感觉,你不这么认为吗? – 2012-02-17 11:31:35
我们需要更多的代码 – 2012-02-17 11:31:55
约定应该是你通过const引用*传递对象,如果他们不打算改变*。如果传递的QByteArray不应该被改变,那么你可以将它复制到本地的QByteArray中并且在那个上工作。 – stefaanv 2012-02-17 12:03:01