Реализуйте функцию array_size, которая возвращает размер массива

Добрый вечер! Спасибо за помощь. Хотел Вас попросить помочь решить эту задачу. Вот, она сома. Реализуйте функцию array_size, которая возвращает размер массива, переданного в качестве параметра. Функция должна работать только для массивов! Т. е. если функции передать указатель, должна произойти ошибка компиляции. Примеры:

int ints[] = {1, 2, 3, 4};
int *iptr = ints;
double doubles[] = {3.14};
array_size(ints); // вернет 4
array_size(doubles); // вернет 1
array_size(iptr); // тут должна произойти ошибка компиляции

Hint: есть трюк с передачей массивов только заданного размера в функцию (передача массива по ссылке), совместите его с вашими знаниями о шаблонах.

Sample Input:

There are no tests for this task

Sample Output:

OK

#include <cstddef> // size_t

// я так понял, что здесь надо реализовать шаблонную функцию array_size,
// которая возвращает значение типа size_t.

// put your code here

Прошу Вас помочь мне с этой задачей!
Заранее блогадарю.

#include <iostream>

template<typename T, std::size_t S>
std::size_t array_size(T (&a)[S]) {
    return S;
}

int main()
{
    int ints[] = {1, 2, 3, 4};
    int *iptr = ints;
    double doubles[] = {3.14};
    std::cout << array_size(ints) << std::endl; // вернет 4
    std::cout << array_size(doubles) << std::endl; // вернет 1
    std::cout << array_size(iptr) << std::endl; // тут должна произойти ошибка компиляции
    return 0;
}

Добрый вечер! У меня выходит вот так! Почему так?

Compilation error
main.cpp: In function ‘int main()’:
main.cpp:17:33: error: no matching function for call to ‘array_size(int*&)’
     std::cout << array_size(iptr) << std::endl; // тут должна произойти ошибка компиляции
                                 ^
main.cpp:6:13: note: candidate: template<class T, long unsigned int S> std::size_t array_size(T (&)[S])
 std::size_t array_size(T (&a)[S]) {
             ^~~~~~~~~~
main.cpp:6:13: note:   template argument deduction/substitution failed:
main.cpp:17:33: note:   mismatched types ‘T [S]’ and ‘int*’
     std::cout << array_size(iptr) << std::endl; // тут должна произойти ошибка компиляции
                                 ^
main.cpp: In function ‘int main()’:
main.cpp:27:5: error: redefinition of ‘int main()’
 int main()
     ^~~~
main.cpp:10:5: note: ‘int main()’ previously defined here

дык всё ж правильно )


Ну а во второй всё написано:

если это система проверки, то видимо там уже есть main

Добрый день!

Все ровно не получается.(

Что именно?

решение не верно, что-то надо изменить. Я не пойму.

Так а как определили, что что-то не верно?

Да, не могу точно сказать. Но, что-то не верно. Надо думать.

:confusedparrot: Так если не можете назвать никакие признаки того, что что-то не верно, то может всё верно?)

Нет, я проверил, не верно. Я пока думаю.

Так я ж и спрашиваю

проверили что именно? Какой результат проверки?

Тоже самое

мне не ясно, зачем вы это написали.
redefinition of ‘int main()’

Compilation error
main.cpp: In function ‘int main()’:
main.cpp:15:33: error: no matching function for call to ‘array_size(int*&)’
std::cout << array_size(iptr) << std::endl; // тут должна произойти ошибка компиляции
^
main.cpp:4:13: note: candidate: template<class T, long unsigned int S> std::size_t array_size(T (&)[S])
std::size_t array_size(T (&a)[S]) {
^~~~~~~~~~
main.cpp:4:13: note: template argument deduction/substitution failed:
main.cpp:15:33: note: mismatched types ‘T [S]’ and ‘int*’
std::cout << array_size(iptr) << std::endl; // тут должна произойти ошибка компиляции
^
main.cpp: In function ‘int main()’:
main.cpp:25:5: error: redefinition of ‘int main()’
int main()
^~~~
main.cpp:8:5: note: ‘int main()’ previously defined here
int main()

это означает, что есть уже такая функция в коде.

В задании ж просили только функцию array_size сделать )

Вот решение, а не то, что вы написали!

#include <cstddef> // size_t

// реализуйте шаблонную функцию array_size,
// которая возвращает значение типа size_t.

template <typename A, size_t size>
size_t array_size(A (&array)[size]) {
    return size;
}

Так вроде ж именно это и написали? :thinking:

А то, что main скорее всего убрать надо при отправке системе проверки, я два раза говорил.