#cpp #массивы #функции #gcc
Есть несколько функций, которые принимают в качестве параметра массив целых чисел. #includeusing namespace std; // нахождение наибольшего целого числа в массиве int FindLargest(int arr[]) { int largest = arr[0]; for (int i = 1; i < arr.size(); i++) { if ( arr[i] > largest) { largest = arr[i]; } } return largest; } // содержатся ли в массиве повторяющиеся элементы bool ContainsDuplicates(int arr[]) { for (int i = 0; i < arr.size(); i++) { for(int j = 0; j < arr.size(); j++) { if (i != j) { if (arr[i] == arr[j]) return true; } } } return false; } // содержатся ли в массиве повторяющиеся элементы (ver 2.0) bool ContainsDuplicates2(int arr[]) { for (int i = 0; i < (arr.size() - 1); i++) { for (int j = i + 1; j < arr.size(); j++) { if (arr[i] == arr[j]) return true; } } return false; } int main() { } Компилятор выводит следующие ошибки. Не могу понять в чем они заключаются. C:\Users\saibo>gcc algorithms.cpp algorithms.cpp: In function 'int FindLargest(int*)': algorithms.cpp:21:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 1; i < arr.size(); i++) ^~~~ algorithms.cpp: In function 'bool ContainsDuplicates(int*)': algorithms.cpp:34:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 0; i < arr.size(); i++) ^~~~ algorithms.cpp:36:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for(int j = 0; j < arr.size(); j++) ^~~~ algorithms.cpp: In function 'bool ContainsDuplicates2(int*)': algorithms.cpp:50:27: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 0; i < (arr.size() - 1); i++) ^~~~ algorithms.cpp:52:31: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int j = i + 1; j < arr.size(); j++) ^~~~ Может пишу что-то не так. Буду рад подсказке!
Ответы
Ответ 1
arr в int FindLargest(int arr[]) - это не массив, а указатель. (При попытке создать параметр-массив, он автоматически превращается в указатель.) Указатель не знает размер массива, на который указывает. Вам нужно передавать размер массива как отдельный параметр. (Скажем, int FindLargest(int arr[], int size).) И вообще, . может применяться только к классам. Ни массивы, ни указатели не являются классами, так что .size() никак не мог сработать. Или, можно вообще отказаться от массивов и использовать std::vector. Вот на них .size() работает.Ответ 2
Это вам не Java какая :), это С++ - при передаче массива надо передавать размер отдельно. Или пользоваться классами C++ типа vector, array...
Комментариев нет:
Отправить комментарий