c++将const对象引用传递给函数
c++ passing a const object reference to a function
错误:将"const QByteArray"作为"QByteArray&QByteArray::append(const QByteArray&)'丢弃限定符[-fpermission]
由于在作为函数参数传递时将对象设为常量是一种惯例,所以我已经这样做了。但现在我犯了一个错误!!,我不想让函数保持不变,因为我必须将qbyte数组中的数据转换为short,然后将其附加到另一个数组中。
QByteArray ba((const char*)m_output.data(), sizeof(ushort));
playbackBuffer.append(ba);
我真的需要把这个数组传给playbackbuffer
它在playbackBuffer.append(ba)
上给了我一个错误;
请帮助
提前感谢
这意味着您正在const成员上调用一个非const成员函数。假设append
函数修改了字节数组。对于const引用,您不应该进行修改。
基本上,它所说的是您试图附加到一个常量数组。
如果"append"不更改对象本身,而只是返回附加的两个数组,则需要将该方法声明为const以允许调用。
考虑一下:
struct foo
{
void bar();
};
const foo f;
f.bar();
这里,在对bar()
的调用中,this
指针是&f
。但是bar()
不是常量函数,所以this
的类型是foo*
,这与const foo*
不兼容。(换句话说,bar()
说它可能会突变foo
,但f
说它是一个不可变的foo
。)
bar()
需要标记为const
(如果可以的话),或者f
不需要是const
。
在您的情况下,我假设您使用的是Qt,因此不能修改QByteArray
(也不应该修改,因为append
必然是一个非常量函数),而是建议您去掉对象上的const
,这会阻止您使用该函数。
那么您正试图在const对象上调用一个非常量函数?这就是将const xxx传递为"this"参数的含义。因为最终任何成员函数都是(类*this,其余参数)
要么制作
QByteArray& QByteArray::append(const QByteArray&);
是
QByteArray& QByteArray::append(const QByteArray&) const;
(极不可能解决任何问题)或只是
QByteArray* pObj = const_cast<QByteArray*>(&your_obj)
if (pObj)
pObj->append(...
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- 通过向构造函数其他对象引用页面来创建对象
- 如何将类对象作为对另一个头文件函数的引用传递
- 从函数返回 libconfig 类设置对象引用
- 通过引用重载多个函数对象
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- 通过在引用线程对象来传递取消引用的“this”指针来在函数对象构造函数中创建线程是好是坏
- 是否可以通过引用传递函数对象
- 创建返回对象引用的成员函数的最简单方法
- C++从全局静态函数中引用对象
- 为什么析构函数在对象引用作为参数传递时函数范围结束后调用
- 使用公共函数将对象引用传递到不同的类对象数组中
- 通过引用将函数对象传递到 std 算法中
- 通过类函数返回引用,并在c++中返回整个对象
- 如何从C++中的函数返回对象引用,以及如何从客户端调用该函数
- c++将const对象引用传递给函数
- 通过值传递函数对象vs通过引用传递函数对象(c++)
- 带有构造函数的OLE自动化对象的初始对象引用
- 返回对对象构造函数的引用