2011-02-01 10 views
9

Mam problem z parsowaniem wiersza poleceń z doładowaniem: opcje_programu. Najszybszym sposobem, aby to wyjaśnić to, aby pokazać kod tak:Parsowanie argumentów wiersza komend LPTSTR * z parametrem :: 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); 

Parser konstruktor ma wziąć const std :: vector < Wykres>

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 w moim programie jest

typedef std::basic_string<TCHAR> tstring; 

błąd pojawia się:

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 

Gdzie, oh gdzie, idę na manowce? Próbowałem wszystkich rodzajów rzucania i ponownego definiowania, ale nic nie zadziałało i jestem na końcu mojej uwięzi.

Edit @Zac:
Dokonywanie zmian sugerowanych ... I pojawia się błąd:

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 

Edycja Wystarczy wskazać, że używam Visual Studio 2008 VC9 kompilator

Odpowiedz

5

Wydaje się, że przy użyciu build Unicode, więc albo jawnie użyć wersji szerokiej char:

po::wcommand_line_parser parser(args); 

lub bardziej elastyczny:

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

To jest Georg. Zamierzam napisać polecenie tcommand_line_parser. Dzięki człowieku. – Dennis

2

Linia, do której przyjechałeś, znajduje się poniżej:

const std::vector<tstring> args; 

go zmienić na:

std::vector<tstring> args; 
+2

@ Dennis: Nawet jeśli ctor parsera przyjmuje wektor po const &, to nie znaczy, że wektor, który do niego przejdziesz, musi być const. Oznacza to, że ctor nie zmieni wektora. Dlatego ta odpowiedź usuwa twoją niepotrzebną const, co jest błędem, gdy później próbujesz zmodyfikować wektor poprzez push_back. –

+0

Fred ... na miejscu. Zac ... nie działa. To była pierwsza iteracja mojego programu. Zobacz wpis do edycji w pytaniu. – Dennis

+0

@Dennis: sprawdź, czy opcja kompilacji UNICODE jest wyłączona w ustawieniach projektu. –

Powiązane problemy