场景
在main函数中的两个参数(int argc , char *argv[])
,都是系统构造的。通常来说,我们只需要去解析即可,不需要去构造这样一个参数。
然而,今天写代码时却不得不构造这样一个参数。原因是使用了一个第三方的模块(准确的说是基于第三方模块),第三方模块初始化时需要接受(int argc , char ** &argv)
这样的参数。注意到其中的引用符号!
通常来说,直接传递main函数的argc
, argv
是没有问题的。事实也确实如此,传递main函数接受的argv
不会有编译错误。不过有些坑就是,这个模块自己参数解析写得太武断!就是不允许有多余的参数项!一旦有多余参数项就会导致其停止解析参数,最终导致其解析失败。然而我的程序除了给这个模块传参数,还需要额外的参数啊!
没有办法,我就得自己构造仅仅包含第三方模块需要的参数argv
, 但是狗血的事情出现了!
怎么构造就是不行!!编译一直报错:
用类型为‘char**’的右值初始化类型为‘char**&’的非常量引用无效
经过一系列的修改,终于正确编译了。
一切的狗血,都是因为概念理解的不清晰。
解决方案
只考虑argv
的构造:
int fack_main(int argc , char **&argv);
int fack_argc = 2 ;
char arg0[] = "program name" ;
char arg1[] = "arg