c ++将const对象引用传递给函数

时间:2012-02-17 11:29:25

标签: c++ reference const

  

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

上给了我一个错误

请帮助
提前谢谢

5 个答案:

答案 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(...