1
我想傳遞一個對象作爲一個函數的引用,它接受對象作爲一個const但是編譯器拋出:編譯錯誤C2662
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作爲const引用傳入f_Callback?
非常感謝你,這是解決方案。我可以問一下在開始時將const放在最後的區別是什麼? – KKlouzal
@KKlouzal如果你把'const'放在bginning中(就像你在你的問題中那樣),然後你把*返回的值*'const',如果你把它放在函數之後,最後你做*函數*常量(即告訴編譯器它不會改變對象中的任何東西)。 –