const char **是什么样的?

时间:2016-08-09 06:39:28

标签: c++ constructor

我有一个类,它接受主命令行参数(例如,-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 **?

2 个答案:

答案 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**)函数参数的方法。如果你想从默认构造函数传递给参数构造函数,那么上面所有的东西都必须全局化。