Поскольку sVec
является vector<std::string>
, а не vector<char *>
, второй аргумент, передаваемый split()
, должен быть каким-то образом преобразован в экземпляр std::string
.
В классе std::string
существует неявный конструктор, который может прозрачно создавать экземпляр из const char *
(именно поэтому ваш второй пример успешен), но AnsiString :: c_str () возвращает char *
, а не const char *
, поэтому этот конструктор не применяется.
Выполнение преобразования самостоятельно должно решить вашу проблему:
boost::split(sVec, (const char *) AnsiString(response).c_str(),
boost::is_any_of(" "));
Или, более точно:
boost::split(sVec, std::string((const char *) AnsiString(response).c_str()),
boost::is_any_of(" "));