无法从'const char *'转换为'std :: _ St​​ring_const_iterator< _Elem,_Traits,_Alloc>

时间:2012-05-04 13:20:45

标签: c++ visual-studio

我在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;
}

有人可以告诉我这段代码有什么问题。

请帮忙。

1 个答案:

答案 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}的迭代器在字符串内部并使用当前的构造函数。