【问题标题】:C2440 compilation errorC2440 编译错误
【发布时间】:2013-11-19 12:23:23
【问题描述】:

我是初学者。我正在使用VS2008。在file1.cpp 中,我正在调用file2.c 中的OALPAtoVA 函数。我收到C2440。我相信这是由于编译期间 C 和 C++ 文件之间造成的一些混淆。

file1.cpp

extern OMAP_MMCHS_REGS *m_pbRegisters;

m_pbRegisters = OALPAtoUA(AM33X_MMCHS1_REGS_PA);    //error at this line

file_2.c

VOID* OALPAtoVA(UINT32 pa, BOOL cached)
{
//some code
return va;
}

我得到的错误是,

error C2440: '=' : cannot convert from 'void *' to 'OMAP_MMCHS_REGS *'

如何解决这个错误?

【问题讨论】:

    标签: c++ c visual-studio-2008


    【解决方案1】:

    假设OALPAtoUAOALPAtoVA 之间的区别只是您的问题中的一个错字。

    问题在于,与 C 不同,C++ 不提供从 void* 到不同指针类型的隐式转换。所以如果你的函数返回一个void*,你必须明确地转换它:

    m_pbRegisters = static_cast<OMAP_MMCHS_REGS*>(OALPAtoVA(AM33X_MMCHS1_REGS_PA));
    

    【讨论】:

    • 非常感谢!您节省了大量的挫败感!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多