基本上是下面的代码,不能通过编译器(g++)
#include <boost/program_options.hpp>
#include <iostream>
using std::cout;
using std::endl;
namespace po = boost::program_options;
class static_class {
public:
static po::options_description cmd_opt; // here is the definition
};
po::options_description static_class::cmd_opt("dummy");
// the line below cannot pass the compiler !!!
static_class::cmd_opt.add_options()
("help", "show usage info.")
;
main() {
cout << static_class::cmd_opt << endl;
}
错误信息:
test.cpp:16:1: error: ‘cmd_opt’ in class ‘static_class’ does not name a type
任何的想法?
PS我正在尝试为我需要在小型命令行环境中处理的每个命令定义一个单独的选项描述。我正在使用 bison 和 flex 来解析命令行环境。命令的所有参数都将发送到这个静态类进行参数解析。
由于参数定义是静态的,我不想让它们成为堆栈中的某种数据结构(只是在我看来这可能是快速和干净的)。我认为如果它们不是静态的,这些代码会没问题,但如果它们是静态的会发生什么?