2011-02-01 69 views
9

我有一个与boost:program_options命令行解析问题。解释它的最快方法是显示代码,以便:解析LPTSTR *命令行参数与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); 

解析器构造函数应该采取一个const的std ::矢量<图在我的计划>

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编译

回答

5

你似乎使用Unicode生成,因此无论是明确使用宽字符版本:

po::wcommand_line_parser parser(args); 

或更灵活:

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

您误入歧途的线路如下:

const std::vector<tstring> args; 

将其更改为:

std::vector<tstring> args; 
+2

@ Dennis:尽管解析器ctor通过const&接受了一个向量,但这并不意味着你传入的向量需要是const。这确实意味着ctor不会改变向量。这就是为什么这个答案会删除你不必要的const,当你稍后尝试通过push_back修改vector时,这是一个错误。 – 2011-02-01 13:08:50

+0

弗雷德...现货。 Zac ...没有工作。这是我的程序的第一次迭代。请参阅问题文章中的修改。 – Dennis 2011-02-01 13:24:36