编译错误C2662
Compile Error C2662
我试图传递一个对象作为一个函数的引用,该函数接受该对象作为const,但编译器抛出:
error C2662: 'const int DataPacket::GetData(void)': cannot convert 'this' pointer from 'const DataPacket' to 'DataPacket &'
智能感知说:
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传递到f_Callback作为const引用?
问题是在回调中,DataPacket
对象Packet
被标记为const
。这意味着不能在对象中调用非const函数。
这可以简单地通过使GetData
成员函数const
来改变,不,这不是你所做的,你只是使返回的整数const,这没有意义(因为值只是被复制并且失去了它的const-ness)。
将函数声明为
int GetData() const;
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- C++ 错误 C2662 无法将"this"指针从"const Type"转换为"Type &"
- 为什么C2662错误没有't应用于对std::unique_ptr<B>对象
- 错误C2662无法从常量转换为引用
- c++错误C2662或如何正确声明
- 编译错误C2662
- 在const指针指向的对象中调用非const函数(错误C2662)