无法从'char **'转换为'char *[]'
Cannot convert from 'char **' to 'char *[]'
我有一种我要调用的方法。原型看起来像这样:
void MyMethod(const char* names[])
我想构造一个char*的数组以传递此方法,但是我无法锻炼语法。关于我能做的最好的是:
char* names[] = new char*[numNames];
但这不会编译。有什么想法吗?
注意:我无法更改myMethod的声明,这是用石头设置的。
虽然这里的其他所有人似乎都挂在(正确)解决您的语法(Tagring []
)我现在怀疑您目前正在努力的问题是如何通过指针到指针到const-char。您提供的原始语法是错误的,但是这样做:
char **names = new char *[numNames];
// populate names[]
MyMethod(names);
无法完全解决您的问题。您将收到"无匹配函数调用"错误,因为您传递的参数是特定类型的(指针到点到char),而该函数期望不可忽视的不同类型(指针到销钉到const-char)。
简单的事实是,您不能从char **
做到这一点。出于原因,请参见此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)对其进行大量清理,但是我一直保持着令人震惊的动态,因为它们是您开始的。
我有以下想法:
char** names = new char*[numNames];
顺便说一句,以下函数声明声明相同的函数
void MyMethod(const char* names[]);
void MyMethod(const char** names);
void MyMethod(const char* names[10]);
char** names = new char*[numNames];
syntax简要:
如果数组只是字符的数组,我们会说:
char* arr = new char[10]
^ ^ ^
T P T
t-类型
P-指针(因为new
返回指针(如果成功或抛出bad_alloc
))
因此,char*的数组是:
char* * arr = new char*[10]
^ ^ ^
T P T
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串