C++ 常量字符**看起来像什么?
我有一个类,它接受主命令行参数(例如,-B,-a等),并对它们进行处理,但我希望能够在不传递命令行参数的情况下实例化该函数,例如: 建造商:C++ 常量字符**看起来像什么?,c++,constructor,C++,Constructor,我有一个类,它接受主命令行参数(例如,-B,-a等),并对它们进行处理,但我希望能够在不传递命令行参数的情况下实例化该函数,例如: 建造商: myClass(int argc, const char **argv){ <initialise class with flags from argv> } myClass() : myClass(2, "-B") {} } myClass(int argc,const char**argv){ } myClass():myCla
myClass(int argc, const char **argv){
<initialise class with flags from argv>
}
myClass() : myClass(2, "-B") {}
}
myClass(int argc,const char**argv){
}
myClass():myClass(2,“-B”){}
}
在这里,我试图用标志“-B”实例化myClass,但它一直给我错误:
参数3从'const char[3]'到'const char**'的转换未知。
所以我想知道我需要做什么才能将一个值作为const char**传入?
const char**
是指向const char*
的指针。在本例中,您打算将多个参数作为argv
的一部分传递,因此可以传递如下内容:
const char* argv[] = {"<program name>", "B"};
myClass m(2, argv);
const char*argv[]={”,“B”};
myClass m(2,argv);
注:const char**x
&const char*x[]
相同。当需要“表示”数组时,第二种语法很有用
这里我给出了一种模拟内部测试的
main(int,char**)
函数参数的方法。如果您想从默认构造函数传递到参数构造函数,那么上述所有内容都必须是全局的。第一级是指向char*
的第一个指针。第二级是指向c字符串的第一个const char
的指针
> cdecl explain "const char ** args"
declare args as pointer to pointer to const char
如果有-std=c++11可用,则可以使用此示例(但可以重写为使用旧标准):
#包括
#包括
#包括
课堂测试{
公众:
测试(常量标准::向量和参数){
用于(自动参数:参数(&A){
std::cout这不是真正的代码。请发布真正的代码。现在,投票结束,因为缺少示例。注意1:如果您想传递main
参数,那么类型const char**argv
将不起作用。没有从char**
到char const**
的隐式转换。注意2:char
的数组(例如文字“-B”
)不会衰减为指针对指针。您可能需要类似char flag[]=“-B”
的内容,然后您可以将flag
的地址作为char**
传递,方法是将其作为myClass(2,&flag)传递
@DavidC.Rankin您缺少一个链接:应该有一个char const*
指向标志[0]。或者,char const*flag=“-B”
。注意:在您的示例中,argv
不是一个const char**
,注释没有解释这一差异。没有理由相信问题中的代码准确地代表了真实的代码。这是一种“类似的情况”也就是说,如果您真的认为值得提供一个答案,那么我认为您应该解决与目标“接受主命令行参数”不兼容的问题.@juanchopanza,没错&我在答案中已经给出了这一点。似乎OP希望将这些参数传递给自己的类以进行进一步处理。此外,main()
中的char**
是出于C遗留原因(当时不存在const
).这就是原因,我提出了const char**
,因为它从未打算更改argv
@Cheers,似乎OP想要使用构造函数的委托对main
的参数传递到自己的类进行单元测试。main()
出于遗留原因接受char**
,但实际上它们应该被视为const char**
。我在代码中做了一些琐碎的解释。如果您觉得需要更多解释,请在此处随意评论或编辑答案。
#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;
}