2012-08-10 3 views
10

Ich möchte einen Standardwert für den Positionsparameter wie im Kommentar im Code geben, aber der Compiler beschwert sich. Der Code, wie es ist, kompiliert fein. Ich benutze Boost 1.46.1 und g ++Wie gebe ich einen Standardwert für Vektor <string> in boost :: program_options

int main(int argc, char *argv[]) { 
    namespace po = boost::program_options; 

    po::positional_options_description p; 
    p.add("path", -1); 

    po::options_description desc("Options"); 
    std::vector<std::string> vec_str; 
    std::string str; 
    desc.add_options() 
     ("foo,f", po::value<std::string>()->default_value(str), "bar") 
     //("path,p", po::value< std::vector<std::string> >()->default_value(vec_str), "input files.") 
     ("path,p", po::value< std::vector<std::string> >(), "input files.") 
    ; 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm); 
    po::notify(vm); 
} 
+1

[Does diese Hilfe?] (Http://stackoverflow.com/a/3152802/220636) – nabulke

+0

diese Zeile kompiliert:
("Pfad, p", po :: Wert >() -> default_value (std :: vector (), ""), "Eingabedateien.")
aber ich weiß nicht warum – Michael

+0

@nabulke ja es hilft – Michael

Antwort

11

Ich brauche eine Textdarstellung des Standardwert zu geben, http://lists.boost.org/boost-users/2010/01/55054.php zu sehen.

I.e. die folgende Zeile funktioniert:

("path,p", po::value< std::vector<std::string> >()->default_value(std::vector<std::string>(), ""), "input files.") 

Ich denke, das für die Hilfe Ausgabe benötigt wird, was in meinem Beispiel könnte

std::cout << desc << std::endl; 

Da der Compiler nicht weiß, wie die operator<<() für vector<string> zu überlasten, es beschwert sich.

Verwandte Themen