[英]vc6 to vs2010 porting error
我被困在將我的項目從VC6移植到VS2010。 請任何人幫助我。
void CEdchLoop::ReceiveSdu(UINT8* Sdu, UINT32 BitLength, int Fn)
{
UINT8* pPdu = Sdu;
int Bit = 8;
UINT32 SourceId = GetBitsL(pPdu, BitLength, Bit, 32);
UINT32 PduUniqueId = GetBitsL(pPdu, BitLength, Bit, 32);
}
在上面的代碼中我得到錯誤錯誤C2664:'GetBitsL':無法將參數1從'UINT8 *'轉換為'const UINT8 *&'
和GetBitsL定義為UINT32 GetBitsL(const UINT8*& Bin, UINT32& BitLength, int& Bit, int Count)
請任何人幫我這個。 我很抱歉,如果這不是一個很棒的問題。 但是傻到五分鍾比永遠傻瓜好。
提前致謝。
GetBitsL
需要引用指向const-UINT8的指針。 你給它一個指向volatile-UINT8的引用,並沒有直接的by-reference轉換。 通過以下方式將pPdu
更改為:
// UINT8* pPdu = Sdu;
const UINT8* pPdu(Sdu);
它仍然被初始化為指向與Sdu
相同的UINT8
,但現在作為函數期望的指向const-UINT8的指針。 該功能仍然可以修改指針 ,但是不知道它指向 。 (這應該暗示您可能沒有將該功能用作設計意圖,因此請考慮這一點)。
問題最好通過演示來解釋:
int * ip;
const int *& cipr = ip;
好的,此時, cipr
是對ip
的引用。 這不合法,您將在以下部分中看到原因。
const int * cip = some_const_data;
cipr = cip;
該賦值是合法的,因為作為(引用)指向const數據的指針,允許將cipr
指定為指向const數據。 但正因如此,由於cipr
是對ip
的引用,現在ip
指向const數據。 這是一個問題:
*ip = 7;
這是合法的,因為ip
的類型是指向非const int的指針。 但是,通過上面的一些技巧,我們指出了const數據。 這是不允許的,所以我們的初始聲明,我們綁定cipr
引用ip
必須是非法的。 通過將pPdu
傳遞給GetBitsL
您嘗試做同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.