我在MS visual studio 2005上的Windows上运行Openipmp客户端。虽然根据文档,它仅在visual studio 6和MS visual studio .NET上进行了测试。
当我编译DRMPlugin时,一段代码给出了错误
error C2440: '<function-style-cast>' : cannot convert from 'const char *'
to 'std::_String_const_iterator<_Elem,_Traits,_Alloc>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>
]
No constructor could take the source type, or constructor overload resolution was ambiguous
这是代码
bool OpenIPMPDOIContentInfoManager::ParseHostIPPort(const std::string& hostURL,
std::string& hostIP, int& hostPort) {
const char* colon = strchr(hostURL.data(), ':');
if (colon == NULL) {
return false;
}
hostIP = std::string(hostURL.begin(), std::string::const_iterator(colon));
hostPort = atoi(++colon);
return true;
}
有人可以告诉我这段代码有什么问题。
请帮忙。
答案 0 :(得分:2)
hostIP = std::string(hostURL.begin(), std::string::const_iterator(colon));
您无法从指向角色的指针创建std::string::const_iterator
。您不应该尝试将C样式字符串函数strchr
与C ++样式std::string
混合,因为它们混合不好。使用std::string::find
找到:
,然后std::string::substr
创建hostIP
,或者使用std::find
(算法)来获取{{1}的迭代器在字符串内部并使用当前的构造函数。