我是初学者。我用的是VS2008。在 file1.cpp
中,我调用 file2.c
中存在的 OALPAtoVA 函数。我收到 C2440
。我相信这是由于编译过程中 C 和 C++ 文件之间造成的一些混淆造成的。
文件1.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 *'
如何解决这个错误?
最佳答案
假设 OALPAtoUA
和 OALPAtoVA
之间的差异只是您问题中的拼写错误。
问题在于,与 C 不同,C++ 不提供从 void*
到不同指针类型的隐式转换。因此,如果您的函数返回 void*
,则必须显式转换它:
m_pbRegisters = static_cast<OMAP_MMCHS_REGS*>(OALPAtoVA(AM33X_MMCHS1_REGS_PA));
关于c++ - C2440 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20071479/