テンプレート関数を使用しています。オンラインで見つかったのは、C++で配列の長さを返すことです。私はメソッドを直接呼び出すと、別のメソッドを呼び出すとエラーが発生することがわかりました。エラーはno instance of function template "array_size" matches the argument list
です。ヘルパー関数からテンプレート関数を呼び出せません
私は明らかにメソッドを使って配列を渡す方法について誤解されていますが、なぜこれがうまくいかないのか分かりません。
template<size_t SIZE, class T> inline size_t array_size(T(&arr)[SIZE]) {
return SIZE;
}
int wordLength(char* word) {
return array_size(word) - 1; // Gets argument error
}
void fooBar() {
int n = array_size("Hello"); // Works!
int m = wordLength("Hello"); // What I want }
は何細部私はこれについて行方不明ですし、私はそれは、そのような私は、あなたがどのようにarray_size
作品誤解されているwordLength
'wordLength'には配列がないので、単純にできません。あなたが持っているのはポインタだけで、それが指しているデータやそのメモリに割り当てられているメモリの量を知る方法はありません。コンパイル時に文字列の長さを取得するには、 'constexpr'引数と' constexpr'再帰関数を使用する必要があります。 –
wordlengthを 'int wordLength(char word [])'として宣言すると動作します –
このテンプレートはコンパイル時に配列に対してのみ動作し、charへのポインタや実行時にこの関数を使用しようとしています。 'wordLength'は配列長データをどのような形式でも持っていないため、決して動作しません。これはC++ですので、 'std :: string'を使用してください。 –