无法从'char **'转换为'char * []'

时间:2014-01-28 00:42:28

标签: c++

我有一个方法,我试图打电话。原型看起来像这样:

void MyMethod(const char* names[])

我想构造一个char *数组来传递给这个方法,但我不能训练语法。关于我能做的最好的事情是:

char* names[] = new char*[numNames];

但是这不能编译。有什么想法吗?

注意:我无法更改MyMethod的声明,这是一成不变的。

3 个答案:

答案 0 :(得分:2)

虽然这里的其他人似乎都在忙着(正确地)解决你的语法问题(尾随[])但我怀疑你目前遇到的问题是如何将指针传递给指针常量,字符。您提供的原始语法是错误的,但这样做:

char **names = new char *[numNames];

// populate names[]

MyMethod(names);

不会完全解决您的问题。您将收到“无匹配函数调用”错误,因为您传递的参数是特定类型(指向指针指向char的指针),而该函数期望一个非平凡可转换的不同类型(指针到指针给const炭)。

简单的事实是,你不能从char **开始。 See this question/answers原因是什么,但它的长短是类型根本不兼容。如果你想在不改变原型的情况下这样做,你将不得不做这样的事情:

int numNames = 5;
char **names = new char *[numNames];

// populate your names[], then...

const char **ro_names = new const char *[numNames];
std::copy(names, names+numNames, ro_names);

MyMethod(ro_names);

delete [] ro_names;
// clean up names[] elements, then...
delete [] names;

我很了解。您可以使用矢量(无论如何应该使用它,btw)大大清理它,但是我保持了你开始时的颤抖动态。

答案 1 :(得分:0)

我有以下想法:

char** names = new char*[numNames];

顺便说一下,下面的函数声明声明了相同的函数

void MyMethod(const char* names[]);
void MyMethod(const char** names);
void MyMethod(const char* names[10]);

答案 2 :(得分:0)

char** names = new char*[numNames];

语法简述:

如果array只是char的数组,我们会说:

char* arr = new char[10]
 ^  ^             ^
 T  P             T

T型

P - 指针(因为new返回指针(如果成功,或抛出bad_alloc))

因此,char *的数组是:

char* * arr = new char*[10]
 ^    ^             ^
 T    P             T