0

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' : cannot convert parameter 1 from 'UINT8 *' to 'const UINT8 *&' としてエラーが発生します

GetBitsL は次のように定義されます。UINT32 GetBitsL(const UINT8*& Bin, UINT32& BitLength, int& Bit, int Count)

誰でもこれで私を助けてください。素晴らしい質問ではない場合は申し訳ありません。しかし、5 分間馬鹿であることは、永遠に馬鹿であることよりも優れています。

前もって感謝します。

4

2 に答える 2

1

この問題は、デモンストレーションで最もよく説明されています。

int * ip;
const int *& cipr = ip;

さて、この時点で、ciprは への参照ipです。これは合法ではありません。その理由については、次のセクションで説明します。

const int * cip = some_const_data;
cipr = cip;

ciprconst データへのポインター (への参照) であるため、const データを指すように割り当てることが許可されているため、その割り当ては正当でした。しかし、そのため、ciprは への参照であるためipipconst データを指すようになりました。それは問題だ:

*ip = 7;

ipの型が非 const int へのポインタであるため、これは正当です。ただし、上記のいくつかの策略により、const データを指すようにしました。それは許されません。したがって、私たちciprが参照することになっている最初のステートメントはip違法でなければなりません。pPduそして、それは に渡すことでやろうとしていることと同じですGetBitsL

于 2013-04-12T04:53:56.227 に答える