繁体   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