//Using boost program options to read command line and config file data
#include <boost/program_options.hpp>
using namespace std;
using namespace boost;
namespace po = boost::program_options;
int main (int argc, char *argv[])
{
po::options_description config("Configuration");
config.add_options()
("IPAddress,i","IP Address")
("Port,p","Port")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, config),vm);
po::notify(vm);
cout << "Values\n";
string address = (vm["IPAddress"].as<std::string >()).c_str();
string port = (vm["Port"].as<std::string>()).c_str();
cout << (vm["IPAddress"].as<string>()).c_str();
cout << " " << (vm["Port"].as<string>()).c_str();
return 0;
}
Sind die eingegebenen Werte irgendwie nicht druckbar?Wie löse ich "boost :: bad_any_cast: fehlgeschlagene Konvertierung mit boost :: any_cast", wenn Boost-Programmoptionen verwendet werden?
Hier ist gdb Ausgang scheint Problem geworfen werden werden:
nach dem Werfen einer Instanz genannt terminate 'boost :: exception_detail :: clone_impl
' was(): boost :: bad_any_cast: failed Umwandlung boost :: any_cast
Program received signal SIGABRT, Aborted. 0x0000003afd835935 in raise() from /lib64/libc.so.6
string address = (vm["IPAddress"].as<std::string >()).c_str();
ist, wo der Fehler auftritt; Ich habe std :: string und string mit den gleichen Ergebnissen versucht.
testboostpo -i 192.168.1.10 -p 5000
ist die Befehlszeile.
habe ich versucht, die Arten zu erklären, wie so:
config.add_options()
("IPAddress,i", po::value<std::string>(), "IP Address")
("Port,p", po::value<std::string>(), "Port");
aber der Fehler aufgetreten ist nach wie vor.
Könnte das ein echter Fehler sein?
Bitte schreiben Sie die Befehlszeilenargumente, die Sie an das Programm übergeben. – Praetorian
nit: es ist überflüssig, das Ergebnis von 'std :: string :: c_str()' in ein 'std :: string' zu konvertieren –