2012-02-17 152 views
0

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)错误;

请帮助
在此先感谢

+7

你ATLEAST不得不发布一些代码,使错误的感觉,你不这么认为吗? – 2012-02-17 11:31:35

+1

我们需要更多的代码 – 2012-02-17 11:31:55

+0

约定应该是你通过const引用*传递对象,如果他们不打算改变*。如果传递的QByteArray不应该被改变,那么你可以将它复制到本地的QByteArray中并且在那个上工作。 – stefaanv 2012-02-17 12:03:01

回答

10

这意味着你调用一个const成员在非const成员函数。据推测,你的append函数修改字节数组。用const引用,你不应该修改。

+0

我不修改数组中的数据,只是读取它并将其附加到另一个数组中,是否有办法解决。 – ken 2012-02-17 12:09:46

+1

从您编辑的问题:它是可能不是常量的playbackBuffer。如果需要填写,请不要将它作为常量引用传递。 – stefaanv 2012-02-17 12:19:17

0

所以,你试图调用一个const对象的非const函数? 这就是传递const xxx作为'this'参数意味着什么。 因为最终任何成员函数真的是 (类* this,其余的参数)

0

要么让你

QByteArray& QByteArray::append(const QByteArray&); 

QByteArray& QByteArray::append(const QByteArray&) const; 

(极不可能解决任何东西)或者只是

QByteArray* pObj = const_cast<QByteArray*>(&your_obj) 
    if (pObj) 
     pObj->append(... 
+1

Dangerously close to -1'ing,但为什么你会在这里建议'const_cast'?你想要不确定的行为吗? – GManNickG 2012-02-17 11:36:08

+0

确实,'const_cast'是完全错误的,如果对象是'const',会给出未定义的行为。如果你需要修改它,那么不要首先声明它为'const'。 – 2012-02-17 11:39:26

+0

这闻起来像是你永远不应该做的事... – hochl 2012-02-17 11:44:41

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的该对象阻止您使用该函数。

相关问题