1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
||||||
1 | ||||||
Передача двумерного массива в функцию. Ошибка "invalid types for array subscript"16.11.2014, 03:19. Показов 8019. Ответов 10
Метки нет (Все метки)
Заранее прошу прощения, если тема уже поднималась, но я ничего дельного не нашел.
При попытке обратиться к элементам массива, указатель на который передается в функцию, выдает invalid types float[int] for array subscript Что характерно, при вызове swap() из main, ошибки нет, значит я неправильно передаю массив? Где ошибка?
0
|
16.11.2014, 03:19 | |
Ответы с готовыми решениями:
10
Ошибка error: invalid types 'int[int]' for array subscript Ошибка компиляции invalid types ‘int[int]’ for array subscript Ошибка: error: invalid types ‘int[int]’ for array subscript Ошибка в структуре: Invalid types `int[int]' for array subscript |
шКодер самоучка
|
|||||||||||
16.11.2014, 03:34 | 2 | ||||||||||
Вы передаете в функцию swapel 1-мерный массив и пытаетесь внутри нее вызвать swap для элементов 2хмерного массива...
Добавлено через 5 минут
0
|
Вездепух
12800 / 6675 / 1797
Регистрация: 18.10.2014
Сообщений: 16,897
|
||||||||||||||||
16.11.2014, 03:50 | 3 | |||||||||||||||
Для двумерного массива объявленного как 'float B[Size][Size]' это, разумеется, работать не будет. Обычный двумерный массив несовместим с типом указатель-на-указатель.
Это даже не скомпилируется. Добавлено через 2 минуты Ошибка в том, что вы передаете в функцию указатель и почему-то полагаете, что вы с этим указателем сможете работать, как с двумерным массивом. Это бессмыслица. Тут надо заметить, что у вас в программе используется нестандартное расширение компилятора. Вот такой код
Однако, если ваш компилятор поддерживает такие массивы и вы не против воспользоваться этим нестандартным расширением, то передавать массив в вашу функцию можно так
0
|
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
|
16.11.2014, 03:50 [ТС] | 4 |
А как правильно объявнять динамические массивы? И, соответственно, потом передавать?
Только учусь, лучше уж привыкать к хорошему сразу) Компилятор gcc
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.11.2014, 04:06 | 5 |
Никак.
На языке с++ не существует динамических массивов. Вы можете воспользоваться контейнерами, которые умеют динамику. Либо через указатель работать с куском памяти, выделенном в куче.
0
|
1 / 1 / 0
Регистрация: 25.08.2012
Сообщений: 47
|
|
16.11.2014, 04:08 [ТС] | 6 |
0
|
Вездепух
12800 / 6675 / 1797
Регистрация: 18.10.2014
Сообщений: 16,897
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.11.2014, 04:32 | 7 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено mersinvald как решение
Решение
Как создать двумерный массив неконстантного размера в С++
Существует несколько способов. Рассмотрим их на примере двумерного массива 'array' размера N x M с элементами типа 'int'. При этом ни N, ни M не являются константами времени компиляции. 1. Простейший способ: вектор векторов
Синтаксис доступа - привычный 'array[i][j]'. Передача в функции - как 'vector<vector<int>> &'
2. Моделирование двумерного массива через одномерный с пересчетом индексов
Чтобы доступиться к элементу по двумерному индексу [i][j] просто выполняем пересчет индексов по формуле 'i * M + j', т.е. доступаемся к элементу 'array[i * M + j]'. (На самом деле именно так работают встроенный тип "массив" в языках С и С++ для любой размерности массива.) Передача в функцию - очевидным образом
3а. "Рваный" массив с индивидуальным выделением памяти
Передача в функции
3б. "Рваный" массив с общим выделением памяти
Освобождение памяти
Добавлено через 11 минут Разумеется, вышеприведенные разглагольствования на тему динамических массивов вам нужны только в том случае, если вам действительно нужен массив неконстантного размера в программе. Т.е. если величина 'Size', например, вводится пользователем или читается из файла, т.е. заранее не известна. Если же величина 'Size' жестко задана на стадии компиляции, то все эти усилия становятся ненужными. Просто объявите ее глобально как
8
|
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
|
||||||
14.12.2014, 20:23 | 8 | |||||
@TheCalligrapher, подскажите пожалуйста, какую функцию выполняют / что означают пустые скобки "()" в конце строки
Если эти круглые скобки не указывать, не изменится ничего? Спасибо.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
14.12.2014, 22:08 | 9 |
Изменится. С ними память инициализируется значением по-умолчанию для данного типа. В случае int - это будет 0. Если их не писать, то инициализации не будет, а элементы будут содержать случайные мусорные значения.
2
|
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
|
|
16.12.2014, 16:41 | 10 |
@DrOffset, я правильно понимаю - такая инициализация гарантируется стандартом?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
16.12.2014, 17:07 | 11 |
1
|
16.12.2014, 17:07 | |
16.12.2014, 17:07 | |
Помогаю со студенческими работами здесь
11
invalid types ‘double[int]’ for array subscript Invalid types 'float[int]' for array subscript Invalid types 'float[int]' for array subscript Invalid types `float[int]' for array subscript Ошибка: invalid types ‘int[int]’ for array subscript invalid types '<unresolved overloaded function type>[int]' for array subscript Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Администрирование Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием
Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
|
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
|
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows
Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
|
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
|
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
|
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
|
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
|
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
|
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|