c++ - C2440 编译错误

标签 c++ c visual-studio-2008

我是初学者。我用的是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 *'

如何解决这个错误?

最佳答案

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

问题在于,与 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/

相关文章:

从 super 终端接收8位数据到89c51的c代码

c - ptrdiff_t 在 C 中定义在哪里?

c - 为什么同一个 C 程序有时会快得多

c - 如何在 Visual Studio 2008 中编译 C 代码?

c++ - 将字符串转换为 double 函数

c++ - 如何在 C++ 中使用 FMOD?

sql-server - 如何在 SQL Server 2008 中部署 CLR 函数

c# - Crystal 报表数据库登录失败

c++ - 分配空间中的链表?

c++ - 如何在 C++ 中禁用 CodeSonar 警告