C2440编译错误

时间:2013-11-19 12:23:24

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

我是初学者。我正在使用VS2008。在file1.cpp我正在调用file2.c中的OALPAtoVA函数。我得到了C2440。我认为这是由于C& 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 *'

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

假设OALPAtoUAOALPAtoVA之间的差异只是你问题中的拼写错误。

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

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