Векторная строка с буст-библиотекой C ++ выдает ошибку - PullRequest
0 голосов
/ 23 февраля 2012

вот код, который я хочу написать.

int opt;
po::options_description desc("Allowed options");
desc.add_options()
    ("help","produce help message")
    ("compression",po::value<int>(&opt)->default_value(10),"optimization level")
    ("include-path,I", po::value< std::vector<std::string> >(), "include path")
    ("input file", po::value< std::vector<std::string> >(),"input file")
    ;


po::variables_map vm;
po::store(po::parse_command_line(argc,argv,desc),vm);
po::notify(vm);

if (vm.count("help")){
    std::cout <<desc<<"\n";
    return 1;
}
if (vm.count("compression")){
    std::cout<<"Compression level was set to"<<vm["compression"].as<int>()<<".\n";
} else {
    std::cout << "compression level was not set.\n";
} 
if (vm.count("include-path")){
    std::cout << "Include paths are:     " << vm["include-path"].as< std::vector<std::string> > ()<< "\n";
    }

Компилятор выдает ошибку для окончательного оператора if, где я хочу напечатать параметр include-path . ошибка, которую он дает,

rx_timed_samples.cpp: 62: 96: ошибка: нет совпадения для 'operator <<' в 'std :: operator << [с _Traits = std :: char_traits] ((* & std :: cout) , ((const char *) "Пути для включения:")) << (& vm.boost :: program_options :: variable_map :: operator [] ((* * std :: basic_string (((const char *) "include -path "), (<em> (const std :: allocator ) (& std :: allocator ())))))) -> boost :: program_options :: variable_value :: as с T = std: : vector, std :: allocator>> '

Я не понимаю? пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Вам нужна специализация оператора потока, который может обрабатывать векторы.

template<class T>
std::ostream& operator <<(std::ostream& os, const std::vector<T>& v)
{
    std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " ")); 
    return os;
}
1 голос
/ 23 февраля 2012

Я думаю, что проблема здесь в том, что оператор << не определен для <code>std::vector<std::string>.Что необходимо для этого звонка:

std::cout << "Include paths are:     " << vm["include-path"].as< std::vector<std::string> > ()<< "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...