使用boost :: program_options解析LPTSTR *命令行参数

时间:2011-02-01 12:11:47

标签: c++ string boost boost-program-options

我遇到了使用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);

解析器ctor应该采用const std :: vector&lt; charT&gt;

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是

typedef std::basic_string<TCHAR> tstring;

我得到的错误是:

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

哪里,哦哪里,我误入歧途?我已经尝试了各种各样的铸造和重新定义,但没有任何工作,我在我的系绳的最后。

编辑@Zac:
进行您建议的更改...我收到错误:

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

修改 只是要指出我使用的是Visual Studio 2008 VC9编译器

2 个答案:

答案 0 :(得分:6)

您似乎正在使用unicode构建,因此要么显式使用宽字符版本:

po::wcommand_line_parser parser(args);

或更灵活:

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

答案 1 :(得分:2)

你误入歧途的行是:

const std::vector<tstring> args;

将其更改为:

std::vector<tstring> args;