0

我有一个功能:

void add(char const**);

我调用它如下:

template<typename T>
void anotherAdd(T const& t) {
  add(&t);
}
...
anotherAdd("some string");

结果我得到了错误:

 no known conversion for argument 1 from 'const char (*)[10]' to 'const char**'     

为什么不能进行转换?

因为我认为以下是正确的:

"some string" <=> char const* =>
&"some string" <=> char const**
4

1 回答 1

1

数组不是指针。

此代码需要一个指向指针的指针

void add(char const**);

编译器告诉您它无法生成指向指针的指针,因为您的代码没有指向的指针。您实际上是在尝试评估&"some string",这没有任何有效意义。

此代码将起作用,因为它会创建char const*您尝试获取地址的缺失。

template<typename T>
void anotherAdd(T const& t) {
  char const *pt = &t; // Now there's a pointer that you can take the address of.
  add(&pt);
}
于 2013-03-18T14:38:33.583 回答