【发布时间】:2019-03-04 17:57:44
【问题描述】:
我正在尝试调用此方法
#define SIZE 16
void DoSomething(char(&value)[SIZE])
{
}
从这个方法:
void BeforeDoingSomething(char* value, int len)
{
if (len == SIZE)
{
DoSomething(value);
}
}
尝试这样做会给我这个错误:
“char (&)[16]”类型的引用(非 const 限定)不能用“char *”类型的值初始化
关于如何让编译器接受在函数BeforeDoingSomething 中传递的value 的任何提示?
【问题讨论】:
-
您如何确定
value指向char[SIZE]的开头?你也许可以reinterpret_cast,但我不确定。无论如何我都不推荐。 -
我发现了一个相关的问题here。虽然严格来说它可能会解决您的问题,但这感觉就像一个尴尬的情况。我会鼓励你考虑稍微重新设计。为什么
DoSomething总是需要一个长度为SIZE的数组?为什么BeforeDoingSomething不能总是使用长度为SIZE的数组而不是指针和长度? -
这种尴尬情况的原因是因为这是在 DLL 中发生的。编写
DoSomething的开发人员就是这样写的,当调用我的DLL 时,它的形式是BeforeDoingSomething内部的形式。当涉及到调用 DLL 的人(调用者不会是 C++)时,我什至不知道如何执行char(&value)[SIZE]之类的东西
标签: c++