2017-08-02 13 views
-2

私はブーストでコマンドライン引数を解析しようとしています。ここでは(私は私が助けを必要部分を含めています)私のコードです:boost.program_optionsでコマンドライン引数を解析する - C++

私は私の主な機能は、に設定されている
#include <iostream> 
#include <iterator> 
#include <boost/program_options.hpp> 

using std::cerr; 
using std::cout; 
using std::endl; 
namespace po = boost::program_options; 

try { 

    po::options_description desc("Allowed options"); 
    desc.add_options() 
     ("help", "produce help message") 
     ("compression", po::value<double>(), "set compression level"); 

    po::variables_map vm; 
    po::store(po::parse_command_line(ac, av, desc), vm); 
    po::notify(vm); 

    if (vm.count("help")) { 
     cout << desc << "\n"; 
     return 0; 
     } 

    if (vm.count("compression")) { 
     cout << "Compression level was set to " 
      << vm["compression"].as<double>() << ".\n"; 
     } else { 
      cout << "Compression level was not set.\n"; 
      } 
     } 
    catch(exception& e) { 
     cerr << "error: " << e.what() << "\n"; 
     return 1; 
    } 
    catch(...) { 
     cerr << "Exception of unknown type!\n"; 
    } 

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

しかし、私はhttps://github.com/boostorg/program_options/blob/develop/example/first.cppこれらのパラメータを含んで、次のされたコード:

int main(int ac, char* av[]) 

は、私はそれをcomileときは、これを吐くと私は完全に失われています:

Terminal return

+0

テキストの画像を投稿しないでください。テキスト*を質問にコピー&ペーストしてください。 –

+0

メイン関数を "int main(int ac、char * av [])"に変更するか、 "ac"をすべて見つけて "argc"に変更し、同様に "av"を "argv"に変更するか、良いこと – systemcpro

+0

引数の名前については、実際には関係ありません。 'argc'と' argv'は単に 'ac'と' av'の略語のように2つの古い名前です。あなたが望むなら、それらを 'foo'と' bar'と名付けることができます。 –

答えて

1

ます。また、例外を含めるのを忘れて - ここにあなたのコードが動作し..です

#include <iostream> 
#include <iterator> 
#include <boost/program_options.hpp> 
#include <exception> 

using std::cerr; 
using std::cout; 
using std::endl; 
using std::exception; 
namespace po = boost::program_options; 

int main(int ac, char** av){ 

try { 

    po::options_description desc("Allowed options"); 
    desc.add_options() 
     ("help", "produce help message") 
     ("compression", po::value<double>(), "set compression level"); 

    po::variables_map vm; 
    po::store(po::parse_command_line(ac, av, desc), vm); 
    po::notify(vm); 

    if (vm.count("help")) { 
     cout << desc << "\n"; 
     return 0; 
     } 

    if (vm.count("compression")) { 
     cout << "Compression level was set to " 
      << vm["compression"].as<double>() << ".\n"; 
     } else { 
      cout << "Compression level was not set.\n"; 
      } 
     } 
    catch(exception& e) { 
     cerr << "error: " << e.what() << "\n"; 
     return 1; 
    } 
    catch(...) { 
     cerr << "Exception of unknown type!\n"; 
    return 1; 
    } 
return 0; 
} 

g++ -std=c++11 cmd.cpp -l boost_program_options 

でこれをコンパイルして、あなたは実際にあなたが残すことができ

問題ないはずですあなたがしたい場合は、 "std = C++ 11"を出してください。私はその両方でそれを試しました

関連する問題