0

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

有人可以告诉我代码有什么问题吗?

请帮忙。

4

1 回答 1

2
hostIP = std::string(hostURL.begin(), std::string::const_iterator(colon));

您不能std::string::const_iterator从指向字符的指针创建 a。您不应该尝试将 C 风格的字符串函数strchr与 C++ 风格std::string混合,因为它们不能很好地混合。使用std::string::find定位:然后std::string::substr创建hostIPor 否则,使用std::find(algorithm) 将迭代器获取到:字符串内部并使用当前的构造函数。

于 2012-05-04T13:26:18.883 回答