我有一个类,它接受主命令行参数(例如,-B,-a等)并对它们执行某些操作,但我也希望能够在不传递命令行参数的情况下实例化该函数,例如:
构造
myClass(int argc, const char **argv){
<initialise class with flags from argv>
}
myClass() : myClass(2, "-B") {}
}
这里我试图使用标志&#34; -B&#34;来实例化myClass,但它一直给我错误:
no known conversion for argument 3 from ‘const char [3]’ to ‘const char**’
所以我想知道我需要做什么才能将值传递给const char **?
答案 0 :(得分:1)
第一级是指向char *
的第一个指针的指针。第二级是指向c-string的第一个const char
的指针。
> cdecl explain "const char ** args"
declare args as pointer to pointer to const char
如果你有-std = c ++ 11可用,你可以使用这个例子(但可以重写它以使用旧标准):
#include <iostream>
#include <vector>
#include <string>
class test {
public:
test(const std::vector<std::string> & args) {
for (auto & arg : args) {
std::cout << arg << "\n";
}
}
test() : test{{"-B"}} {}
};
int main(int argc, const char ** argv) {
test sth{{argv+1, argc+argv}}; // skip program name here
test sth_else;
}
答案 1 :(得分:-1)
const char**
是指向const char*
的指针。在您的情况下,您打算在argv
中传递多个参数,因此您可以传递如下内容:
const char* argv[] = {"<program name>", "B"};
myClass m(2, argv);
注:const char** x
&amp; const char* x[]
是一样的。当人们希望&#34;代表&#34;时,第二种语法很有用。一个数组。
这里我给出了一种模仿内部测试的main(int, char**)
函数参数的方法。如果你想从默认构造函数传递给参数构造函数,那么上面所有的东西都必须全局化。