簡體   English   中英

vc6到vs2010移植錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM