Rajeshwar
Rajeshwar

Reputation: 11651

Cannot run the following code

I am trying the lean mean C++ option parser and I tried the example

#include <iostream>
 #include "optionparser.h"

 enum  optionIndex { UNKNOWN, HELP, PLUS };

 const option::Descriptor usage[] =
 {
  {UNKNOWN, 0,"" , ""    ,option::Arg::None, "USAGE: example [options]\n\n"
                                             "Options:" },
  {HELP,    0,"" , "help",option::Arg::None, "  --help  \tPrint usage and exit." },
  {PLUS,    0,"p", "plus",option::Arg::None, "  --plus, -p  \tIncrement count." },
  {UNKNOWN, 0,"" ,  ""   ,option::Arg::None, "\nExamples:\n"
                                             "  example --unknown -- --this_is_no_option\n"
                                             "  example -unk --plus -ppp file1 file2\n" },
  {0,0,0,0,0,0}
 };

 int main(int argc, char* argv[])
 {
   argc-=(argc>0); argv+=(argc>0);              // skip program name argv[0] if present
   option::Stats  stats(usage, argc, argv);    
   option::Option options[stats.options_max], buffer[stats.buffer_max]; //------------Error Comes here-----------------------
   option::Parser parse(usage, argc, argv, options, buffer);

   if (parse.error())
     return 1;

   if (options[HELP] || argc == 0) {
     option::printUsage(std::cout, usage);
     return 0;
   }

   std::cout << "--plus count: " <<
     options[PLUS].count() << "\n";

   for (option::Option* opt = options[UNKNOWN]; opt; opt = opt->next())
     std::cout << "Unknown option: " << opt->name << "\n";

   for (int i = 0; i < parse.nonOptionsCount(); ++i)
     std::cout << "Non-option #" << i << ": " << parse.nonOption(i) << "\n";
 }

However the get the errors

Error 1 error C2057: expected constant expression
Error 2 error C2466: cannot allocate an array of constant size 0
Error 3 error C2133: 'options' : unknown size Error 4 error C2133: 'buffer' : unknown size

Any suggestions on how to fix this ?

Upvotes: 0

Views: 323

Answers (1)

Neil Kirk
Neil Kirk

Reputation: 21773

option::Option options[stats.options_max], buffer[stats.buffer_max];

Arrays must have size known at compile time. Use vectors intsead.

vector<option::Option> options(stats.options_max), buffer(stats.buffer_max);

Upvotes: 1

Related Questions