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