编译错误C2662

克鲁扎尔

我试图将对象作为对将对象作为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章