Следующая программа работает корректно:
#include <iostream>
#include <boost/lexical_cast.hpp>
int main(int argc, const char *argv[])
{
std::string to_port("8004");
unsigned short intport = boost::lexical_cast<unsigned short>(to_port);
std::cout << intport << std::endl;
std::cout << std::hex << intport << std::endl;
return 0;
}
Но если мы изменим первую строку main
на:
std::string to_port;
Мы получаем исключение:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >'
what(): bad lexical cast: source type value could not be interpreted as target
Aborted (core dumped)
что приводит к выводу, что есть что-то не так с параметром вы передаете в lexical_cast
.
Вы можете распечатать переменную to_port
, чтобы проверить ее содержимое непосредственно перед lexical_cast
? Вы уверены, что он правильно инициализирован и по-прежнему находится в области видимости при использовании (например, нет задействованных времен, никаких оборванных указателей)?
Это работает для меня. Что содержит 'to_port'? – Mankarse
, например. «8004» или любой номер порта –
Этот [этот пример] (http://coliru.stacked-crooked.com/view?id=5318113dc6ceca259cc3ec1af87cd54c-e54ee7a04e4b807da0930236d4cc94dc) не работает для вас? – Mankarse