我试图将对象作为对将对象作为const接受的函数的引用,但是编译器将抛出此错误:
error C2662: 'const int DataPacket::GetData(void)': cannot convert 'this' pointer from 'const DataPacket' to 'DataPacket &'
IntelliSense说:
the object has type qualifiers that are not compatible with the member function
object type is: const DataPacket
我对代码进行了测试,以演示该问题:
#include <iostream>
#include <functional>
class DataPacket
{
int SomeVar;
public:
DataPacket(int InitialData)
{
SomeVar = InitialData;
}
const int GetData()
{
return SomeVar;
}
};
void ProcessPacket(const DataPacket& Packet)
{
std::cout << Packet.GetData() << std::endl;
}
int main()
{
std::function<void(const DataPacket& Packet)> f_Callback;
f_Callback = ProcessPacket;
while (true)
{
f_Callback(DataPacket(10));
}
}
基本上我有一个STD函数,用户可以将其设置为使用自己的回调函数。当新的数据包到达时,较低级别的类将创建DataPacket类型的对象。然后,我想将该对象作为常量引用传递到回调函数中,以免复制整个对象并限制用户更改原始对象。
这里发生了什么?如何将DataPacket作为const引用传递给f_Callback?
问题在于在回调中,该DataPacket
对象Packet
被标记为const
。这意味着您不能在对象中调用非常量函数。
这可以通过使GetData
成员函数简单地更改const
,不,这不是您要做的事情,您只制作了返回的整数const,这没有任何意义(因为该值将被复制并失去其const-ness)。
而是将函数声明为
int GetData() const;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句