我试图开发使用C ++与升压一个跨平台应用程序。

我通常程序类Unix环境中,我总是定义“主”,如下所示:

int main( const int argc, const char* argv[] )
{
...
}

对于这种应用,我开始在Windows环境下,使用Visual Studio 2003。

当我尝试使用boost :: program_options这个定义,我得到编译从program_options :: Store错误:

po::options_description desc("Supported options");
desc.add_options()...;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

错误:

main.cpp(46) : error C2665: 'boost::program_options::store' : none of the 2 overloads can convert parameter 1 from type 'boost::program_options::basic_parsed_options<charT>'
    with
    [
        charT=const char
    ]
    c:\boost_1_38_0\boost\program_options\variables_map.hpp(34): could be 'void boost::program_options::store(const boost::program_options::basic_parsed_options<charT> &,boost::program_options::variables_map &,bool)'
    with
    [
        charT=char
    ]
    c:\boost_1_38_0\boost\program_options\variables_map.hpp(43): or       'void boost::program_options::store(const boost::program_options::basic_parsed_options<wchar_t> &,boost::program_options::variables_map &)'
    while trying to match the argument list '(boost::program_options::basic_parsed_options<charT>, boost::program_options::variables_map)'
    with
    [
        charT=const char
    ]

我试图通过定义主迫使wchar_t的函数,如下所示:

int main( const int argc, wchar_t* argv[]){
...
}

然后再编译,但我得到的链接错误:

main.obj : error LNK2019: unresolved external symbol "void __cdecl boost::program_options::store(class boost::program_options::basic_parsed_options<unsigned short> const &,class boost::program_options::variables_map &)"  referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: __thiscall boost::program_options::basic_parsed_options<unsigned short>::basic_parsed_options<unsigned short>(class boost::program_options::basic_parsed_options<char> const &)"  referenced in function "public: class boost::program_options::basic_parsed_options<unsigned short> __thiscall boost::program_options::basic_command_line_parser<unsigned short>::run(void)" 
main.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl boost::program_options::to_internal(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"  referenced in function "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl boost::program_options::to_internal<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > >(class std::vector<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > const &)" 

最后,如果我回落到由Visual Studio默认的主定义的设置,它编译和链接:

int main( const int argc, _TCHAR* argv[]){
...
}

所以,这是很好的适用于Windows,但这项工作时,我尝试把它带到* nix中?做这些系统通常定义_TCHAR类型?我还没有碰到过往心里去。

什么是确定的主要在Windows和工作的* nix的正确方法,加上了boost :: program_options图书馆工作?

有帮助吗?

解决方案

这似乎是一个常量性相关的问题。尝试:

int main( int argc, char* argv[] )
{
  // ...
}

其他提示

int main() int main(int argc, char* argv[])(又名int main(int argc, char** argv))是C ++标准认可的签名。

VisualStudio的尝试是在很多疯狂的方式,包括试图确定(1)你想main()WinMain()和(2)决定,如果你想chars或wchar_ts很有帮助。如果VisualStudio中不认为你是在一个控制台应用程序时,你可能需要的呼叫split_winmain()

如果您希望强制chars(这我会建议),则可能需要 #undef UNICODE

scroll top