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 に答える