我觉得标题很混乱,我会用一些代码来解释我的情况。
template<uint16_t Len>
void add(const int8_t (&i_array)[Len])
{
// Do something
}
class Test
{
public:
int8_t* GetName()
{
return name;
}
private:
int8_t name[10] = "myname";
}
int main()
{
Test mytest;
add(mytest.GetName()); // Compilation error
}
此代码无法编译。生成以下错误: &#34;错误#304:没有函数模板添加的实例匹配参数列表&#34;
似乎编译器无法确定GetName()是否返回大小为10的数组。是吗?
我怎么称呼&#34;添加&#34;用数组上的指针?
谢谢, 尼古拉斯
答案 0 :(得分:2)
Test::GetName
返回指针,而不是数组。您不能将其结果绑定到需要数组引用的函数。但是,您可以更改GetName
的签名以使其返回数组(当然,通过引用):
int8_t (&GetName())[10] { return name; }
或者你可以使用强制转换,但这会破坏类型系统的目的。