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'을 사용하십시오. –