2011-02-01 8 views
9

Tengo un problema con el análisis de línea de comandos con boost: program_options. La forma más rápida de explicarlo es para mostrar el código para:Analizando líneas de comando LPTSTR * args con boost :: program_options

const std::vector<tstring> args; 
if (ac > 0 && NULL!=av) //ac is a ULONG 
{ 
    for (int i = 0; i < ac; i++) 
    { 
     args.push_back(av[i]); //av is an LPTSTR pointer (pointer to TCHAR*) 
    } 

    } 
    po::command_line_parser parser(args); 

Se supone que el analizador ctor tomar un const std :: vector < Gráfico>

typedef basic_command_line_parser<char> command_line_parser; 
typedef basic_command_line_parser<wchar_t> wcommand_line_parser; 

/** Creates instance of 'command_line_parser', passes parameters to it, 
    and returns the result of calling the 'run' method.   
*/ 
template<class charT> 
    class basic_command_line_parser : private detail::cmdline { 
    public: 
     /** Creates a command line parser for the specified arguments 
      list. The 'args' parameter should not include program name. 
     */ 
     basic_command_line_parser(const std::vector< 
            std::basic_string<charT> >& args); 

tstring en mi programa es

typedef std::basic_string<TCHAR> tstring; 

El error que consigo es:

Error 16 error C2664: 'boost::program_options::basic_command_line_parser<charT>::basic_command_line_parser(const std::vector<_Ty> &)' : cannot convert parameter 1 from 'const std::vector<_Ty>' to 'const std::vector<_Ty> &' myfile.cpp 329 

¿Dónde, oh dónde, me estoy desviando? He intentado todo tipo de casting y redefinición, pero nada ha funcionado y estoy al final de mi vida.

Editar @Zac:
realizar los cambios que se sugieran ... me sale el error:

Error 14 error C2664: boost::program_options::basic_command_line_parser<charT>::basic_command_line_parser(const std::vector<_Ty> &)' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty> &' MyFile.cpp 328 

Editar Sólo para señalar que estoy usando Visual Studio 2008 VC9 compilador

Respuesta

5

Usted parece estar utilizando una generación Unicode, así que o bien utilice explícitamente la versión amplia Char:

po::wcommand_line_parser parser(args); 

o la más flexible:

po::basic_command_line_parser<TCHAR> parser(args); 
+0

Eso es todo. Voy a typedef un tcommand_line_parser. Gracias hombre. – Dennis

2

La línea que se extravió con es a continuación:

const std::vector<tstring> args; 

Cambiar a:

std::vector<tstring> args; 
+2

@ Dennis: A pesar de que el analizador sintáctico toma un vector por const &, eso no significa que el vector al que ingresas debe ser const. Significa que ctor no cambiará el vector. Es por eso que esta respuesta elimina su const innecesario, que es un error cuando luego intenta modificar el vector a través de push_back. –

+0

Fred ... lugar en. Zac ... no funciona. Esta fue la primera iteración de mi programa. Ver la edición en la publicación de pregunta. – Dennis

+0

@Dennis: verifique que la opción de compilación UNICODE esté desactivada en la configuración de su proyecto. –

Cuestiones relacionadas