Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串的二维数组传递给函数_C++_C++17 - Fatal编程技术网

C++ 将字符串的二维数组传递给函数

C++ 将字符串的二维数组传递给函数,c++,c++17,C++,C++17,我可以使用以下命令初始化二维字符串数组: const char*const aListOfStrings[]{“test”,“test1”} 但是,如果我想在调用函数时执行相同的操作,例如: void function( char const * const aListOfStrings[] ) {} void CallWithArrayOfStrings() { function( {"test", "test1"} ); } 编译器礼貌地拒

我可以使用以下命令初始化二维字符串数组:


const char*const aListOfStrings[]{“test”,“test1”}

但是,如果我想在调用函数时执行相同的操作,例如:

void function( char const * const aListOfStrings[] ) {}

void CallWithArrayOfStrings()
{
    function( {"test", "test1"} );
}
编译器礼貌地拒绝,并出现以下错误:

error: cannot convert '<brace-enclosed initializer list>' to 'char**'
我似乎理解当数组是变量时如何初始化数组,但显然我不理解它在调用函数的上下文中是如何工作的。我一直认为初始化变量与初始化函数参数是一样的?我一辈子都在撒谎吗?;)

多谢各位

UPATE:已删除C标记。C数组在大括号初始值设定项之前需要一个“=”号,错误则不同。看起来问题很相似,但是。。。
还修复了结束引号。

这是因为编译器没有猜测传递给
函数的内联参数的类型,因此必须在之前明确声明它,例如:

const char* data[] = { "test", "test1" };
function(data);

< >但是C++有<代码>:代码:>代码> STD::InIALIZELSYList,<代码> STD::vector < /代码>,没有任何理由使用一个指针来指向<代码> char < /> >,除非你有特定的要求。

< P>这是因为你的编译器不是猜测你的内联参数的类型,传递给<代码>函数因此,您必须在之前明确声明,例如:

const char* data[] = { "test", "test1" };
function(data);

< C++ >代码< >代码:>代码> STD::InIaliSeleSerixList代码> STD::向量< /代码>,没有特殊的要求,除非有特定的要求,否则不必使用一组指针。< < /P> <代码> const char * const alistoFordSc[] {“test”,“test 1”};code>是


const char*const aListOfStrings[2]{“test”,“test1”}

推导出尺寸

但签名的参数是固定的(除非使用模板),而且不能按值传递C-array,因此:

void函数(char const*const aListOfStrings[])
等效于

void函数(char const*const*alistofstring)

要使用语法,可以使用(奇怪的)语法

或模板版本

template <std::size_t N>
void function(char const * const (&aListOfStrings)[N]);
模板
空函数(字符常量*常量(&alistofstring)[N]);

const char*const aListOfStrings[]{“test”,“test1”}


const char*const aListOfStrings[2]{“test”,“test1”}

推导出尺寸

但签名的参数是固定的(除非使用模板),而且不能按值传递C-array,因此:

void函数(char const*const aListOfStrings[])
等效于

void函数(char const*const*alistofstring)

要使用语法,可以使用(奇怪的)语法

或模板版本

template <std::size_t N>
void function(char const * const (&aListOfStrings)[N]);
模板
空函数(字符常量*常量(&alistofstring)[N]);

const-char*const-aListOfStrings[]{“test”,“test1};
您在结尾处遗漏了双引号。
const-char*const-aListOfStrings[]{“test”,“test1}您在结尾处遗漏了双引号。我确实有一个特定的要求。使用容器不是此特定实例的选项。有没有可能用某种方式来表达呢?刚才回答了我自己的问题:function2((char-const*const[]){“test”,“test2”});这个把戏做得很好。我确实有一个特别的要求。使用容器不是此特定实例的选项。有没有可能用某种方式来表达呢?刚才回答了我自己的问题:function2((char-const*const[]){“test”,“test2”});非常好。谢谢你花时间回答这个问题,但是我需要保留尺寸扣减。铸造工程(见我的评论上面)。模板版本允许扣除(见链接演示)。对于您的铸造,您没有尺寸信息…这是有道理的。我没有仔细考虑过…aListOfStrings[]作为参数在编译时不知道它有多大,唯一的方法是使用模板。谢谢@jarod42谢谢你花时间回答这个问题,但是我需要保留尺寸扣减。铸造工程(见我的评论上面)。模板版本允许扣除(见链接演示)。对于您的铸造,您没有尺寸信息…这是有道理的。我没有仔细考虑过…aListOfStrings[]作为参数在编译时不知道它有多大,唯一的方法是使用模板。谢谢@Jarod42