error: lvalue required as unary '&' operand

finrod86921812 2014-06-17 02:28:28
int CComponentPool::RemoveComponent(char *id)
{
vector<CMTComponent *>::iterator ci;

for ( ci = m_Components.begin() ; ci != m_Components.end() ; ci++ )
{
if ((*ci)->m_ID == id)
{
(*ci)->Stop();
m_MapComponents.erase(((CMTComponent *)(*ci))->m_Type);
FreeComponent *hFreeComp = (FreeComponent *)COsLibrary::GetProcAddr(m_MapComponents[((CMTComponent *)(*ci))->m_Type], FCFN);
hFreeComp(&((CMTComponent *)(*ci)));
m_Components.erase(ci);

break;
}
}
return 0;
}



相关的的定义如下,
#ifdef WIN32
extern "C" __declspec(dllexport) void FreeComponent(CMTComponent** pComponent)
#elif defined(LINUX)
extern "C" void FreeComponent(CMTComponent** pComponent)
#endif
{
SAFE_DELETE( *pComponent);
}

FuncAddr COsLibrary::GetProcAddr(LibHandle hModule, char *lpProcName)
{
return dlsym(hModule, lpProcName);
}

std::map <int, LibHandle> m_MapComponents;


这个程序在VC2010下编译没有问题,在LINUX下用gcc编译,在 hFreeComp(&((CMTComponent *)(*ci))); 处编译报错 error: lvalue required as unary '&' operand
...全文
944 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
finrod86921812 2014-06-17
  • 打赏
  • 举报
回复
FreeComponent(CMTComponent** pComponent)是个库导出函数, 在int CComponentPool::RemoveComponent(char *id)这个文件的头文件里有 typedef void FreeComponent(CMTComponent **);

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧